我需要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
答案 0 :(得分:3)
这种行为的最可能解释是Money
类型使用的是Banker's Rounding(对该页面的评论应该揭示可能的原因)。
浏览文档时,似乎没有“内置”来改变这一点 - 如果你想在SQL本身中执行此操作,你可能需要先显式地转换为DECIMAL
。 (备选方案包括在必要时将至少部分计算提取到应用程序层,或者编写存储过程。)