2009-07-06 40 views
5

Nói chung trong lập trình, các kiểu dữ liệu điểm động không nên được so sánh vì bình đẳng vì các giá trị được lưu trữ thường rất gần đúng.Oracle NUMBER So sánh

Hai giá trị Oracle NUMBER không nguyên nguyên có được so sánh đáng tin cậy cho bình đẳng vì chúng được lưu trữ khác nhau (base-10) không?

Trả lời

5

Có, loại NUMBER của Oracle chính xác. Chúng giống với các số nguyên có thang tỷ lệ hơn các loại float/double. Vì vậy, một số (10,3) có 10 chữ số, 3 sau dấu thập phân, thực sự là một số nguyên gồm 10 chữ số với thang tỷ lệ 3. Trên thực tế, đó là cách Java BigDecimals hoạt động chính xác (là một BigInteger cộng với một tỷ lệ nội bộ).

+0

mọi tài liệu có sẵn? –

+0

http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i16209 – cletus

+0

Không, chúng không chính xác. – Quassnoi

2

Oracle NUMBER loại được lưu trữ dưới dạng tập hợp các chữ số thập phân (nghĩa là base 100, không phải base 10), một chữ số trên mỗi byte.

byte đầu tiên đại diện cho số mũ, các byte khác đại diện cho phần định trị.

Điều đó có nghĩa rằng đối với số lượng rất lớn, ngay cả những số nguyên có thể được làm tròn:

SELECT 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - 
     10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 
FROM dual 


--- 
0 
0

Oracle đảm bảo 38 chữ số chính xác trong một số, mặc dù 40 có thể được biểu diễn. Xem Oracle Concepts để tham khảo.