任何人都可以帮助解决以下舍入问题。提前致谢
我有数字:3.1050 需要输出:3.10 但是当我使用 ROUND(3.1050,2) 我得到结果 3.11 因此我不能在那里使用 ROUND .. 以下是一些可以帮助您解决我的问题的案例
如果值为:3.1030 需要输出:3.10 如果值为:3.1050 需要输出:3.10 如果值为:3.1080 需要输出:3.11
任何人都可以帮助解决以下舍入问题。提前致谢
我有数字:3.1050 需要输出:3.10 但是当我使用 ROUND(3.1050,2) 我得到结果 3.11 因此我不能在那里使用 ROUND .. 以下是一些可以帮助您解决我的问题的案例
如果值为:3.1030 需要输出:3.10 如果值为:3.1050 需要输出:3.10 如果值为:3.1080 需要输出:3.11
您需要的是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