SQL 服务器将不同的结果返回给带十进制数的物理计算器

SQL Server returning a different result to a physical calculator with decimal numbers

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

当我将这个等式插入 SQL 服务器并且 运行 它:

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

我得到结果:

9998.623334700000000000000000000000

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

9998.623335

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

SQL 服务器的答案是 Google 计算器生成的,另一个在线计算器标榜非常准确。

谁能告诉我/证明我应该使用哪一个?

干杯

我认为您已经回答了您自己的问题,说明其他两个来源支持 SQL 服务器。

此外,如果您转换每个操作数,那么您会得到精确的(不是浮点数)数学,您会得到相同的答案:

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

所以我相信 SQL 服务器的回答。