Неправильный расчет значений после применения округления в SQL Server - PullRequest
0 голосов
/ 06 декабря 2018

имеет три значения a, b, c с типом данных Decimal(15,7).

a - это сумма значений b и c.

Я не получилчто случилось.Какой возможный способ получить правильный результат после округления?

Например:

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)

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Точный запрос должен быть

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

Это может дать вам желаемый результат.

0 голосов
/ 06 декабря 2018

Каждый раз, когда вы КРУГЛЫЙ (), вы отклоняетесь от фактического на определенный процент, даже крошечный.Теперь, чем больше вы используете ROUND (), тем дальше вы отклоняетесь.Всегда желательно КРУГЛЫЙ конечный результат.

Я предполагаю, что приведенные вами примеры не являются фактическими числами, с которыми у вас возникли проблемы?

0 голосов
/ 06 декабря 2018

Вы должны округлить результат, а не каждую переменную в отдельности:

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