1

我有一组执行一组计算的存储过程,但是在使用十进制类型时我似乎失去了精度。

我期望下面的计算为 0.0493318673793 - 而我得到的是 0.049331。我已经测试了不同的数据类型,并且我只在使用浮点数时获得了准确度(我已经阅读过应该避免)。

--Representative of SP
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(34,26))
--0.049331

--Using greater decimal precision
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(38,16))
--0.0493318

--Using Float
SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS FLOAT)
--0.0493318673793403

花车真的那么差吗?如果是这样,我有什么选择?


探索下面的哈姆雷特笔记。为什么以下提供不同的输出?

 SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(38,16))
 --0.0493318

 SELECT CAST(4000000.00 AS MONEY)/CAST(81083490.50 AS DECIMAL(38,3))
 --0.04933186737934031096
4

1 回答 1

0

这只会回答你的问题“浮动那么糟糕吗?”......

您是否要要求某人付款至小数点后 15 位?;) 因为money似乎只有 4 位小数精度。

至于那个著名的事情,如果您犹豫要不要使用它,那么由于 thisthisfloat是有道理的。但在您的情况下,您可以满足您的需要,并提供高达 15 个小数点的精度。但它是一种近似的数据类型。所以如果你想用钱,那意味着没有太多的准确性。floatfloatfloat

因此,在这种情况下,您最好使用decimalor money

参考:

于 2013-01-14T14:02:07.647 回答