在存储过程中,我有一个类似的表达式

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

最佳答案

您似乎在错误地计算百分比值。这是我希望的样子:

@some_val * 100 / @total_val

至于ROUND()函数,它将作用于表达式的最终结果,而不是部分结果。因此,首先对表达式进行完全求值,然后将ROUND()应用于结果。

还要注意(如果您还不知道的话),如果除法运算符的两个操作数都是整数,则SQL Server将执行整数除法,即,即使在ROUND()为之前,除法的结果也将四舍五入为最接近的整数。应用。如果要避免这种情况,请确保至少一个操作数不是整数,例如像这样:
ROUND(@some_val * 100.0 / @total_val, 2)

还要注意第二个参数(精度),它在Transact-SQL ROUND() 中是必需的。

10-08 12:43
查看更多