我创建了下表:
create table ex_employee (id number(20,4));
然后我插入以下值:
insert into ex_employee values (9999999999999999.9999);
commit;
结果被四舍五入;
10000000000000000.0000
In this link他们解释了如果精度超过那么它会向上舍入。
我应该怎么做以保持价值不被四舍五入:
9999999999999999.9999
答案 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>