Oracle ROUND函数返回错误值

q9rjltbz  于 2023-10-16  发布在  Oracle
关注(0)|答案(4)|浏览(200)

我在Oracle 11g数据库上运行此SQL语句

select round(79/3 + 87/3 + 86/6 + 95/6) from dual

返回85

select round(79/3 + 87/3 + 86/6 + 95/6,1) from dual

返回85.5

select round(85.5) from dual

返回正确的值86
有人知道为什么第一个SQL语句没有返回正确的值86,而是将其舍入为85吗??

zdwk9cvp

zdwk9cvp1#

如果您这样做:

select 79/3 + 87/3 + 86/6 + 95/6 from dual;

Oracle将返回85.49999999999999999999999999999999999999,当四舍五入到小数点后0位时,实际上是85。它是浮点运算的产物。

ldfqzlk8

ldfqzlk82#

79/3 + 87/3 + 86/6 + 95/6将返回浮点运算,它没有IEEE 754的舍入行为。数字和浮点数here的区别
为了得到正确的结果,你需要运行以下语句:

select round(to_number(79/3 + 87/3 + 86/6 + 95/6)) from dual;
qxgroojn

qxgroojn3#

即使我不知道为什么Oracle正在失去它的精度,但作为一个工作,你可以这样使用它
SELECT round(round(79/3 + 87/3 + 86/6 + 95/6,4),0)FROM DUAL

pzfprimi

pzfprimi4#

它看起来是一个奇怪的精度损失。

SELECT 79/3 + 87/3 + 86/6 + 95/6 FROM DUAL

85.49999999999999999999999999999999999999
显然85.4将四舍五入到85。至于为什么甲骨文在这种情况下失去了精确性,我不确定。

相关问题