Oracle NUMBER比较

时间:2009-07-06 14:14:20

标签: oracle types

通常在编程中,不应对浮点数据类型进行相等比较,因为存储的值通常是近似值。

可以可靠地比较两个非整数Oracle NUMBER值的相等性,因为它们的存储方式不同(基数为10)?

3 个答案:

答案 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以获取参考。