舍入到特定数字ex:4,5,9,0 sql

时间:2013-10-28 13:14:53

标签: sql rounding

我的价格将从一种货币转换为其他几种货币,但一旦转换,我想将它们四舍五入到特定的数字。

我需要回合的例子如下:

任何低于10的轮到下一个数字。为此,我可以使用CEILING功能。 10-14之间的任何一个都需要四舍五入到14.00。例如:12.78至14.00 在14.01和15之间需要四舍五入到15.00。例如:14.25至15.00 在15.01和19之间需要四舍五入到19.00 ex:17.35到19.00 在19.01和20之间需要四舍五入到20.00。例如:19.25至20.00

我知道这看起来有点奇怪,但这是我为我的项目提供的规范。要圆到5的下一个倍数,我也明白了,但是4和9值真的让我很难受。

我需要使用什么公式来获取这些数字,或者更容易爆炸数字,抓住小数点前的值并根据我上面提到的标准做一个案例?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

案例似乎最有意义,但你的“舍入”逻辑可能看起来有点奇怪:

CASE 
WHEN value < 10  THEN CEILING(value) 
WHEN value <= 14 THEN 14 
WHEN value <= 15  THEN 15 
WHEN value <= 19  THEN 19
WHEN value <= 20  THEN 20
END

或者您可以从float转换为int并使用模数(%)运算符:

CASE 
WHEN value < 10  THEN CONVERT(int,CEILING(value)) 
WHEN CONVERT(int,CEILING(value)) % 5 = 0  -- 9.01 - 10, 14.01 - 15, 19.01 - 20, etc.
    THEN CONVERT(int,CEILING(value)) 
WHEN CONVERT(int,CEILING(value)) % 5 <= 4  -- 10.01 - 14, 15.01 - 19, etc.
    THEN CONVERT(int,FLOOR(value / 5)) * 5 + 4 
END

答案 1 :(得分:3)

由于您的要求略有奇怪(没有简单的公式可以涵盖您的所有情况),我认为您最好的选择是使用这样的CASE...WHEN语句。显然根据您的要求调整精确的不等式:

SELECT CASE WHEN colVal < 10 THEN CEILING(colVal)
            WHEN colVal <= 14 THEN 14
            WHEN colVal <= 15 THEN 15
            WHEN colVal <= 19 THEN 19
            WHEN colVal <= 20 THEN 20
            ELSE someotherval
       END

编辑:根据澄清的要求,D Stanley对模数的回答更合适。