3

任何人都可以帮助解决以下舍入问题。提前致谢

我有数字:3.1050 需要输出:3.10 但是当我使用 ROUND(3.1050,2) 我得到结果 3.11 因此我不能在那里使用 ROUND .. 以下是一些可以帮助您解决我的问题的案例

如果值为:3.1030 需要输出:3.10 如果值为:3.1050 需要输出:3.10 如果值为:3.1080 需要输出:3.11

4

1 回答 1

7

您需要的是SQL Server 内部不提供的Round Half Towards Zero舍入方法;SQL Server 的 ROUND() 函数始终遵循“从零开始舍入”,并带有一个用于截断而不是舍入的附加参数。

因此只需编写一个用户函数,它在最后一位数字为 5 后跟零的边缘情况周围使用 Round() 函数:

Create Function dbo.RoundToZero(@Val Decimal(32,16), @Digits Int)
Returns Decimal(32,16)
AS
Begin
    Return Case When Abs(@Val - Round(@Val, @Digits, 1)) * Power(10, @Digits+1) = 5
                Then Round(@Val, @Digits, 1)
                Else Round(@Val, @Digits)
                End
End

来源:SQL Server 舍入方法

于 2013-06-27T09:16:33.350 回答