分区后的SQL Server轮

时间:2012-04-23 10:34:38

标签: sql-server division rounding

在存储过程中,我有一个类似

的表达式
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 个答案:

答案 0 :(得分:9)

您似乎错误地计算了百分比值。这就是我期望它的样子:

@some_val * 100 / @total_val

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

另请注意(如果您还不知道)如果除法运算符的两个操作数都是整数,则SQL Server将执行整数除法,即除法的结果将向下舍入 ROUND()之前,em>到最近的整数,甚至。如果要避免这种情况,请确保至少有一个操作数不是整数,例如像这样:

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

还要注意Transact-SQL ROUND()中需要的第二个参数(precision)。

答案 1 :(得分:2)

Round将在评估其内容后计算。

因此(@total_val / 100) * @some_val将被舍入。