为什么 Oracle 对少于 38 位有效数字的数字进行四舍五入?
Why does Oracle round up a number with less than 38 significant digits?
我们有 Oracle Server 10.2。
为了测试这个,我有一个非常简单的 table。
CREATE TABLE MYSCHEMA.TESTNUMBER
(
TESTNUMBER NUMBER
)
当我尝试插入 0.98692326671601283 时,数字会四舍五入。
INSERT INTO MYSCHEMA.TESTNUMBER (TESTNUMBER)
VALUES (0.98692326671601283);
select returns:
select * from TESTNUMBER
0.986923266716013
它将最后 3 个数字“283”四舍五入为“3”。
即使使用 TOAD UI 查看它并尝试使用 TOAD 输入它,我也得到相同的结果。
为什么?是否可以将此数字插入 Oracle 数字而不对其进行四舍五入?
我认为您需要研究一下您的客户端程序如何显示数值。 Oracle NUMBER 应该完全精确地存储该值;但该值可能会四舍五入以供客户端显示。
例如,使用 SQLPlus:
dev> create table dctest (x number);
Table created.
dev> insert into dctest VALUES (0.98692326671601283);
1 row created.
dev> select * from dctest;
X
----------
.986923267
dev> column x format 0.000000000000000000000000000
dev> /
X
------------------------------
0.986923266716012830000000000
如您所见,默认格式仅显示前 9 位有效数字。但是当我显式更改列格式(SQLPlus 中的客户端功能)时,会显示插入的完整值。
我们有 Oracle Server 10.2。
为了测试这个,我有一个非常简单的 table。
CREATE TABLE MYSCHEMA.TESTNUMBER
(
TESTNUMBER NUMBER
)
当我尝试插入 0.98692326671601283 时,数字会四舍五入。
INSERT INTO MYSCHEMA.TESTNUMBER (TESTNUMBER)
VALUES (0.98692326671601283);
select returns:
select * from TESTNUMBER
0.986923266716013
它将最后 3 个数字“283”四舍五入为“3”。
即使使用 TOAD UI 查看它并尝试使用 TOAD 输入它,我也得到相同的结果。 为什么?是否可以将此数字插入 Oracle 数字而不对其进行四舍五入?
我认为您需要研究一下您的客户端程序如何显示数值。 Oracle NUMBER 应该完全精确地存储该值;但该值可能会四舍五入以供客户端显示。
例如,使用 SQLPlus:
dev> create table dctest (x number);
Table created.
dev> insert into dctest VALUES (0.98692326671601283);
1 row created.
dev> select * from dctest;
X
----------
.986923267
dev> column x format 0.000000000000000000000000000
dev> /
X
------------------------------
0.986923266716012830000000000
如您所见,默认格式仅显示前 9 位有效数字。但是当我显式更改列格式(SQLPlus 中的客户端功能)时,会显示插入的完整值。