0

我需要 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

4

1 回答 1

3

对这种行为最可能的解释是该Money类型使用了所谓的银行家四舍五入法(对该页面的审查应该可以揭示选择它的可能原因)。

浏览文档,似乎没有任何“内置”来改变这一点——DECIMAL如果你想在 SQL 本身中执行这个,你可能需要首先明确地强制转换。(替代方案包括将至少一些计算提取到您的应用程序层,如有必要,或编写存储过程)。

于 2013-03-18T23:56:43.877 回答