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

时间:2018-12-06 07:15:08

标签: sql sql-server tsql sum rounding

具有三个值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

但是我对所有值使用了三舍五入,结果返回错误的结果。

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

预期结果是

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

确切的查询应该是

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

这可以给您想要的结果。

答案 2 :(得分:0)

每次您ROUND()时,您都会偏离实际值一定的百分比,无论多么微小。现在,您使用ROUND()的次数越多,您偏离的范围就越远。始终建议将最终输出舍入。

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