SQL:求和,否定实数给出错误的值

Kid*_*ode 1 sql sql-server rounding

为什么3.21865081787109E-06当值应为零时,以下查询会产生值 ?

CREATE DATABASE TEST
GO
USE TEST
CREATE TABLE NUMS (NUMBER REAL)
GO
INSERT INTO NUMS VALUES (1.67460317460317),(-1.6746)
GO
Run Code Online (Sandbox Code Playgroud)

然后运行:

SELECT SUM(NUMBER) FROM NUMS
Run Code Online (Sandbox Code Playgroud)

这会返回值3.21865081787109E-06吗?

如果我将值转换为十进制,或者如果我将第一个数字缩短为1.6746它,则返回正确的零值?

另外:手动求和数字给出正确的值,看起来好像SUM()修剪了零?

select (1.67460317460317 + -1.6746)

返回:

0.00000317460317

谢谢!

Mar*_*c B 6

为什么它应该是0?

   1.67460317460317
+ -1.6746
-------------------
=  0.00000317460317
=  3.17e-06
Run Code Online (Sandbox Code Playgroud)

你的3.21和"真实"数学3.17之间的差异只是浮点不准确.