Tại sao Oracle không sử dụng Bankers rule (phương thức làm tròn)?Quy tắc làm việc của Oracle Bankers
Trả lời
Số thập phân chính xác là một chủ đề lớn và phức tạp.
Google 'mike colishaw decimal rounding' nếu bạn muốn đọc ahem Oracle về chủ đề này.
Về cơ bản có rất nhiều phương án làm tròn mà có thể xảy ra: -
Vòng everthing xuống - mặc định trong hầu hết các ngôn ngữ bao gồm C như Oracle được viết bằng C này có lẽ là lý do tại sao họ làm điều này.
Làm tròn mọi thứ - hiếm khi được nhìn thấy nhưng đôi khi cần được triển khai do các quy tắc về thuế và thị trường không rõ ràng.
Nửa làm tròn cơ bản - bất kỳ thứ gì ở trên .5 làm tròn mọi thứ khác làm tròn xuống.
Làm tròn một nửa hào phóng - bất kỳ thứ gì dưới đây .5 làm tròn mọi thứ khác tròn lên.
Làm tròn ngân hàng - Số chẵn theo quy tắc Nửa vòng cơ bản, số lẻ quy tắc Làm tròn nửa vòng. Điều này hiếm khi được nhìn thấy trong các ngân hàng thực tế mà thích làm tròn lên nếu các moneys đến thier cách và làm tròn xuống khi nó đi theo cách của khách hàng.
ORACLE NUMBER thực sự là một cách thực hiện Decimal Arithmatic khá tốt và chính xác như mong đợi.
+1 cho chơi chữ của Oracle! –
Bạn luôn có thể thực hiện chức năng của riêng mình cho làm tròn của ngân hàng như được mô tả here.
Vòng làm tròn của ngân hàng là 0,5 đến 0: vòng tròn hướng về số chẵn.
Rất tiếc, tôi đặt vào phần "giải thích" làm tròn 0,5 đến 1. OP không đề cập đến nó. Đã sửa lỗi. – Thilo
Oracle đã thực hiện nửa vòng đi từ zero:
SQL> select round(22.5) from dual
2/
ROUND(22.5)
-----------
23
SQL> select round(23.5) from dual
2/
ROUND(23.5)
-----------
24
SQL> select round(-23.5) from dual
2/
ROUND(-23.5)
------------
-24
SQL> select round(-22.5) from dual
2/
ROUND(-22.5)
------------
-23
SQL>
Tại sao họ không thay đổi nó để làm tròn Bankers'? Vâng, đối với hầu hết các mục đích , cách nhau một nửa từ số là đủ tốt. Thêm vào đó là dự phòng cũ, thay đổi nó có khả năng sẽ phá vỡ quá nhiều của codebase hiện tại - của Oracle cũng như tất cả các khách hàng của họ.
Chủ đề cũ nhưng ai đó vẫn có thể cần điều này. Các phao nhị phân của Oracle và nhị phân tăng gấp đôi theo quy tắc làm tròn của ngân hàng khi làm tròn đến một số nguyên. Vì vậy, bạn có thể sử dụng nó. Nó xấu xí nhưng hoạt động:
given : price = 2.445 SQL> select round(to_binary_float(price * 100))/100 as price_rounded from dual; price_rounded ------------- 2.44 given : price = 2.435 SQL> select round(to_binary_float(price * 100))/100 as price_rounded from dual; price_rounded ------------- 2.44
Nhân và chia cho 100 là cần thiết trong ví dụ này. Tôi đã không thể tìm ra các chi tiết cụ thể của hành vi, nhưng chọn vòng (to_binary_float (price), 2) cho một số thập phân, giá, dường như không liên tục tròn lên hoặc xuống theo các quy tắc tương tự. Tôi đã tìm thấy, tuy nhiên, làm tròn đến một số nguyên luôn mang lại cho tôi những gì tôi cần.
- 1. make: quy tắc gọi quy tắc
- 2. Boost.Spirit.Qi: Lấy thuộc tính của quy tắc và đặt nó làm trường thuộc tính struct của quy tắc kèm theo?
- 3. Xcode 5.0: Quy tắc Thêm quy tắc của Apple đã biến mất ở đâu?
- 4. Tắt quy tắc StyleCop
- 5. Quy trình làm việc của Python 3?
- 6. easyphp .htaccess quy tắc
- 7. Bế tắc trong popen của quy trình con của Python
- 8. Quy tắc mẫu NMake
- 9. Tắt quy tắc CSS
- 10. Quy tắc JUnit TemporaryFolder
- 11. Quy tắc động .htaccess
- 12. Quy tắc cào trên web
- 13. Thư viện để làm việc với các quy tắc lặp lại trong Mục tiêu C?
- 14. Apache viết lại quy tắc mà làm việc có hoặc không có một dấu gạch chéo
- 15. Quy tắc kiểm tra PHPStorm
- 16. Quy tắc chuỗi Heredoc PHP
- 17. Undestanding các write_consistency và quy tắc đại biểu của Elasticsearch
- 18. làm việc với json trong oracle
- 19. Quy tắc css cụ thể của trang - nơi đặt chúng?
- 20. Đối tượng Quy tắc CSS
- 21. Động cơ Ruby & Quy tắc
- 22. Có "quy tắc" cho đường cú pháp của Ruby không?
- 23. Quy tắc kinh doanh động
- 24. quy tắc css lồng nhau
- 25. Quy tắc kết nối ổ cắm liên tục của Android
- 26. Tùy chỉnh quy tắc OCLint
- 27. Các quy tắc cho Iterator Invalidation
- 28. Các quy tắc của generics và các ràng buộc loại
- 29. quy trình làm việc svnmerge
- 30. Ngẫu nhiên các quy tắc CSS
Tôi đoán bạn thực sự có nghĩa là: - Tại sao số thập phân số học sử dụng các kiểu dữ liệu số trong một cơ sở dữ liệu ORAACLE không sử dụng nửa tròn chương trình được gọi là ngân hàng làm tròn. –
Bởi vì Oracle có nhiều tiền hơn so với hầu hết các chủ ngân hàng, và không thấy lý do gì để đưa ra lời khuyên của họ? – skaffman
lấy lời khuyên của ngân hàng ... âm thanh nguy hiểm! – lexu