通常在编程中,不应对浮点数据类型进行相等比较,因为存储的值通常是近似值。
可以可靠地比较两个非整数Oracle NUMBER值的相等性,因为它们的存储方式不同(基数为10)?
答案 0 :(得分:5)
是的,Oracle NUMBER类型是准确的。它们更像是具有比浮动/双重类型的比例的整数。因此NUMBER(10,3)有10位数,小数点后3位,实际上是一个10位整数,其标度为3.实际上,这就是Java BigDecimals的精确工作方式(BigInteger加上内部的标度)。
答案 1 :(得分:2)
Oracle NUMBER
类型存储为十进制数字集(即base 100
,而不是base 10
),每字节一位数。
第一个字节代表指数,其他字节代表尾数。
这意味着对于非常大的数字,甚至整数也可以舍入:
SELECT 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
FROM dual
---
0
答案 2 :(得分:0)
Oracle保证NUMBER中有38位精度,但可以表示40位。请参阅Oracle Concepts以获取参考。