oracle值99999999越来越圆了

时间:2015-01-19 07:37:01

标签: oracle

我创建了下表:

create table ex_employee (id number(20,4));

然后我插入以下值:

insert into ex_employee values (9999999999999999.9999);
commit;

结果被四舍五入;

10000000000000000.0000

In this link他们解释了如果精度超过那么它会向上舍入。

我应该怎么做以保持价值不被四舍五入:
9999999999999999.9999

2 个答案:

答案 0 :(得分:2)

  

结果正在向上舍入[到] 10000000000000000.0000

     

我该怎么做才能保持价值不被四舍五入:9999999999999999.9999

正如您自己注意到的那样,这是一个显示问题,因为您的NUMBER(20,4)有足够的有效数字来精确表示该base10数字。

如果除了Lalit关于“显示格式”的答案之外,该行为的一个常见来源是在应用程序级别使用IEEE 754浮点/双精度值来回读这些数字(分别为7/15重要十进制仅限数字)。此外,无法使用二进制表示法精确表示所有十进制数字。

如果您的主机语言支持,则应为“长十进制数字”。例如,Java有BigDecimal。 Python有Decimal

答案 1 :(得分:1)

只需正确设置 numformat 即可。在SQL*Plus中,您可以set numformat完成。

SQL> set numformat 9999999999999999.9999
SQL> create table ex_employee (id number(20,4));

Table created.

SQL> insert into ex_employee values (9999999999999999.9999);

1 row created.

SQL> select id from ex_employee;

                    ID
----------------------
 9999999999999999.9999

SQL>