在 SQL Server 中应用舍入后,值计算错误



有三个值a,b,c,数据类型为Decimal(15,7)

a是值bc的总和。

我不明白出了什么问题。四舍五入后获得正确结果的可能方法是什么?

例如:

Declare @a decimal(15,7), 
@b decimal(15,7), 
@c decimal(15,7)
SET @a = '15212.82856500000'
SET @b = '15207.52909500000'
SET @c = '5.29947000000'

在上述条件下,它返回正确的结果

select @a, @b + @c

但是我对所有值使用了舍入 3,它返回了不正确的结果。

select ROUND(@a, 3), ROUND(@b, 3) + ROUND(@c, 3)

预期结果为

ROUND(@a, 3) = ROUND(@b, 3) + ROUND(@c, 3)

您应该对结果进行舍入,而不是单独舍入每个变量:

SELECT ROUND(@a + @b + @c, 3)

确切的查询应该是

select ROUND(@a,3),ROUND(@b+@c,3)

这可以给你想要的结果。

每次 ROUND() 时,您都会偏离实际一定的百分比,无论多么微小。现在你使用 ROUND() 的次数越多,你偏离得越远。始终建议对最终输出进行四舍五入。

我假设您给出的示例数字不是您遇到问题的实际数字?

最新更新