我的价格将从一种货币转换为其他几种货币,但一旦转换,我想将它们四舍五入到特定的数字。
我需要回合的例子如下:
任何低于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值真的让我很难受。
我需要使用什么公式来获取这些数字,或者更容易爆炸数字,抓住小数点前的值并根据我上面提到的标准做一个案例?
感谢您的帮助!
答案 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对模数的回答更合适。