SQL Server将不同的结果返回给具有十进制数的物理计算器

时间:2016-07-22 17:08:43

标签: sql-server math decimal rounding

因此,作为我正在运行的查询的一部分,我需要绝对的准确性(或尽可能接近计算机)才能获得结果。

当我将此公式插入SQL Server并运行它时:

BEGIN
    PRINT cast (0.99986333333333333333333333333333333333 * 9999.99 as decimal (38, 30));
END;

我得到了结果:

9998.623334700000000000000000000000

然而,当我将这些数字插入我的物理计算器时,我得到了结果:

9998.623335

我需要知道的是哪一个是正确的,为什么?

SQL Server答案是Google Calculator生成的答案,另一个在线计算器的广告宣传极其准确。

任何人都可以向我展示/向我证明我应该使用哪一个?

干杯

1 个答案:

答案 0 :(得分:2)

我认为你已经回答了自己的问题,说明其他两个来源备份了SQL Server。

此外,如果你转换每个操作数,所以你得到精确(非浮点)数学,你会得到相同的答案:

BEGIN
    PRINT CAST(CAST(0.99986333333333333333333333333333333333 AS decimal(38,30)) * CAST(9999.99 AS decimal(38,30)) as decimal (38, 30));
END;

所以我相信SQL Server的答案。