舍入到最接近的.25

时间:2015-01-28 21:39:07

标签: tsql

有没有人知道如何在t-sql中舍入到最接近的.25?目前我正在使用

进行四舍五入
floor(value * 4)/4

我的客户正在改变他们的算法,并希望在最近的一个季度进行中点。如果该值小于.125舍入到0.00,如果该值大于或等于.125舍入到.25。

4 个答案:

答案 0 :(得分:12)

像这样使用ROUND(value/25, 2) * 25

<强>例1:

DECLARE @value DECIMAL(18, 2)
SET @value = 1.126
SELECT CAST(ROUND(@value/25, 2) * 25 as numeric(18,2)) AS rounded_val

<强>输出:

1.25

<强>例2:

DECLARE @value DECIMAL(18, 2)
SET @value = 1.124
SELECT CAST(ROUND(@value/25, 2) * 25 as numeric(18,2)) AS rounded_val

<强>输出:

1.00

答案 1 :(得分:1)

select Sample,
  Round( ( Sample + Sign( Sample ) * 0.125 ) * 4, 0, 1 ) / 4.0 as Rounded
  from ( values ( 0.0 ), ( 0.1 ), ( 1.125 ), ( 0.25 ), ( 10.5 ),
    ( -0.75 ), ( -0.875 ), ( -1.12 ), ( -1.125 ) )
    as Samples( Sample )

请注意,ROUND可用于截断值的小数部分,而不管符号如何。 FLOOR将始终返回等于或小于原始值的值,当值为负时,这可能会出现问题。

答案 2 :(得分:0)

对于任何需要找到没有剩余部分的最近分隔线的人,您可以使用:

SELECT (CAST(ROUND(@value / 0.25, 2) as int)) * 0.25 

所以基本上这会向下舍入到最接近的0.25

的倍数

答案 3 :(得分:0)

我需要舍入为任意精度和舍入策略。

四舍五入为* .25

DECLARE @roundamt DECIMAL(16,2) = .25, @value DECIMAL(18, 2) = 1.7688
SELECT  ROUND(  (@value - FLOOR(@value)) / @roundamt, 0 ) * @roundamt + FLOOR(@value)

-结果= 1.750000

不同的舍入策略,例如0.02、0.25、0.5、0.75

SELECT
    x.roundamt, ROUND(  (@value - FLOOR(@value)) / roundamt, 0 ) * roundamt + FLOOR(@value)
FROM   
    ( VALUES (0.02), (0.25), (0.5), (0.75) )x(roundamt)

enter image description here