如何正确舍入SQL钱类型?

时间:2013-03-18 21:34:54

标签: sql sql-server rounding currency

我需要SQL专家的帮助。我正在尝试获取4位小数的数据。我正在对“钱”类型进行一些计算。但是,计算并不是我喜欢的。

以下是常规数字和货币类型相同值的示例。

DECLARE @MaxAmt money
DECLARE @MinAmt money

SET @MaxAmt = 207998693.55
SET @MinAmt = 20799442.35

SELECT
((207998693.55 - 20799442.35) / 2 + 20799442.35) / 24 AS Col1,
((@MaxAmt - @MinAmt) / 2 + @MinAmt) / 24 AS Col2

Col1显示的值等于4766627.831250000 虽然Col2的价值为4766627.8312。

我的目标是只显示4个十进制数字,但它应该是正确的圆形。我希望4766627.8313值。

以下演员后会显示。

SELECT CAST(((207998693.55 - 20799442.35) / 2 + 20799442.35) / 24 AS DECIMAL(12,4))

但是当我处理金钱时,我输入的小数值是.8312而不是.8313

1 个答案:

答案 0 :(得分:3)

这种行为的最可能解释是Money类型使用的是Banker's Rounding(对该页面的评论应该揭示可能的原因)。

浏览文档时,似乎没有“内置”来改变这一点 - 如果你想在SQL本身中执行此操作,你可能需要先显式地转换为DECIMAL 。 (备选方案包括在必要时将至少部分计算提取到应用程序层,或者编写存储过程。)