SQL Server раунд после деления

В хранимой процедуре у меня есть выражение, как

select @some_val_in_percents = (@total_val / 100) * @some_val

Если я использую Round функционировать так:

select @some_val_in_percents = Round((@total_val / 100) * @some_val, 0)

будет ли результат округлен при вычислении всего выражения или (@total_val / 100) быть округлены и затем умножены на @some_val?

2 ответа

Решение

Вы, кажется, неправильно рассчитываете процентное значение. Вот то, что я ожидал бы, что это будет похоже на:

@some_val * 100 / @total_val

Для ROUND() функция, она будет влиять на конечный результат выражения, а не на частичный результат. Итак, сначала выражение оценивается полностью, затем ROUND() применяется к результату.

Также обратите внимание (если вы еще этого не знали), что если оба операнда оператора деления являются целыми числами, SQL Server выполнит целочисленное деление, то есть результат деления будет округлен до ближайшего целого числа еще до того, как ROUND() применены. Если вы хотите избежать этого, убедитесь, что хотя бы один из операндов не является целым числом, например, вот так:

ROUND(@some_val * 100.0 / @total_val, 2)

Обратите внимание также на второй аргумент (точность), который требуется в Transact-SQLROUND(),

Round будет рассчитан после оценки его содержимого.

Следовательно (@total_val / 100) * @some_val будет округлено.

Другие вопросы по тегам