T-SQL - 如何将DOWN舍入到最接近的.05

时间:2014-07-31 19:23:23

标签: sql tsql sql-server-2005

我使用的数据库是SQL Server 2005.我试图将值DOWN舍入到最接近的.05(镍)。

到目前为止,我有:

SELECT ROUND(numberToBeRounded / 5, 2) * 5

几乎的工作原理 - 当 numberToBeRounded 1.99 时,我需要的是表达式,以评估 1.95 ,而不是 2

2 个答案:

答案 0 :(得分:6)

为要截断的第三个参数指定非零值而不是舍入:

SELECT ROUND(numberToBeRounded / 5, 2, 1) * 5

注意:截断向零舍入,而不是向下舍入,但如果您有负值,则只会产生差异。要向下舍入甚至为负值,您可以使用floor函数,但是您不能指定小数位数,因此您需要乘以而不是除以:

SELECT FLOOR(numberToBeRounded * 20) / 20

答案 1 :(得分:0)

如果您的数据类型为numeric(ISO decimal)或“金钱”,则您可以非常轻松地向任意特定的"单位"舍入为零,因此:

declare @value money = 123.3499
declare @unit  money = 0.05

select value                = value ,
       rounded_towards_zero = value - ( value % @unit )
from #foo

无论价值本身的符号如何,它都有效,尽管你要舍入的单位应该是正数。

 123.3499 ->  123.3000
-123.3499 -> -123.3000