5

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

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

4

2 回答 2

11

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

@some_val * 100 / @total_val

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

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

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

另请注意Transact-SQLROUND()中需要的第二个参数(精度)。

于 2012-04-23T10:45:58.390 回答
2

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

因此(@total_val / 100) * @some_val会四舍五入。

于 2012-04-23T10:35:27.623 回答