十进制计算失去精度

时间:2013-01-14 13:15:12

标签: sql sql-server sqldatatypes

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

我期待下面的计算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

1 个答案:

答案 0 :(得分:0)

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

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

至于关于float的那个着名的事情,如果你对使用它犹豫不决,那么它有意义due to thisthis。但在您的情况下,float可以满足您的需求,而float可提供最多15个小数点的精确度。但它是一种近似的数据类型。因此,如果您想使用float来赚钱,那就意味着没有太多的准确性。

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

参考: