Dr.*_*rog 2 sql t-sql sql-server rounding
我正在尝试在 SQL 中创建一个自定义舍入,以 0.25 向上或向下舍入,但我不确定这是否真的可能与我想要完成的任务有关。
我已经尝试过 ROUND 语句,但似乎您只能指定将数字四舍五入到的小数位数...我在这里可能是错的,但正在寻找一些指导。
四舍五入应遵循以下规则:
首先检查:
如果小数点后的值在 0.00 和 0.25 之间:
如果小数点后的值大于或等于 0.125,则四舍五入到 0.25
如果小数点后的值小于 0.125,则向下舍入为 .00
如果小数点后的值在 0.25 和 0.50 之间:
如果小数点后的值大于或等于 0.375,则四舍五入到 0.50
如果小数点后的值小于 0.375,则向下舍入至 0.25
如果小数点后的值在 0.50 到 0.75 之间:
如果小数点后的值大于或等于 0.625,则四舍五入到 0.75
如果值小于 0.625,则向下舍入至 0.50
如果小数点后的值在 0.75 和 0.99 之间:
如果小数点后的值大于或等于 0.875,则四舍五入为整数
如果小数点后的值小于 0.875,则向下舍入至 0.75
因此
所有
值要么是:
X.00 X.25 X.50 X.75
例如,
4.416应向上舍入为4.50
2.75仍为2.75
5.834应向下舍入为5.75
7.083应向下舍入为7.00
只需一点数学知识...convert(decimal(10,2),...)是可选的
Declare @YourTable Table ([SomeCol] decimal(10,4)) Insert Into @YourTable Values
(4.416)
,(2.75)
,(5.834)
,(7.083)
Select *
,NewValue = convert(decimal(10,2),round(SomeCol/.25,0)*.25)
From @YourTable
Run Code Online (Sandbox Code Playgroud)
结果
SomeCol NewValue
4.4160 4.50
2.7500 2.75
5.8340 5.75
7.0830 7.00
Run Code Online (Sandbox Code Playgroud)