有没有人知道如何在t-sql中舍入到最接近的.25?目前我正在使用
进行四舍五入floor(value * 4)/4
我的客户正在改变他们的算法,并希望在最近的一个季度进行中点。如果该值小于.125舍入到0.00,如果该值大于或等于.125舍入到.25。
答案 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)