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 服务器的回答。
因此,作为查询的一部分,我 运行 需要结果的绝对准确性(或尽可能接近计算机)。
当我将这个等式插入 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 服务器的回答。