SQL-Server中的计算错误

时间:2011-04-28 08:38:42

标签: sql-server

作为一个例子,我发现了一个简单的计算,如:

select cast(200.00 as float) + 1908.30 + 170.00 + (-1150.00) + (-1128.30)

作为正常添加,这会产生0.00,但SQL Server会将结果显示为2.27373675443232E-13

为什么会这样,我该如何避免这种情况?

3 个答案:

答案 0 :(得分:6)

此错误是float数据类型中固有的,并且是decimal类型存在的原因。永远不要将钱计算为float值!

您可以查看What Every Computer Scientist Should Know About Floating-Point Arithmetic或任何Google结果中的“浮动舍入错误”。

答案 1 :(得分:1)

select cast(200.00 as decimal(10,2)) + 1908.30 + 170.00 + (-1150.00) + (-1128.30)

答案 2 :(得分:0)

这不是sql独有的。 例如,在python中:

'%.50f' % (200.+1908.3+170.-1150.-1128.30)

将导致

'0.00000000000022737367544323205947875976562500000000'

你得到的相同。

这是无法表示每个数字所固有的,这些数字可以表示为10的幂的有限和(例如1908.3),作为2的正负幂的有限和,这就是将其表示为浮点数确实。发生不可避免的近似,并且当您对所述近似值执行操作时,最终结果可能具有小的误差。 Amadan提供的链接解释了它。