SQL Server round after division

后端 未结 2 646
无人及你
无人及你 2021-01-19 15:17

In a stored procedure I have an expression like

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

If I use the Round

2条回答
  •  离开以前
    2021-01-19 16:15

    You seem to be calculating the percent value wrongly. Here's what I would expect it to be like:

    @some_val * 100 / @total_val
    

    As for the ROUND() function, it will act on the final result of the expression, not on the partial result. So, first the expression is evaluated completely, then ROUND() is applied to the result.

    Note also (in case you haven't already known it) that if both operands of the division operator are integers, SQL Server will perform an integer division, i.e. the result of the division would be rounded down to the nearest integer even before ROUND() is applied. If you want to avoid that, make sure that at least one of the operands is not integer, e.g. like this:

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

    Note also the second argument (precision), which is required in Transact-SQL ROUND().

提交回复
热议问题