1

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

我需要四舍五入的示例如下:

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

我知道这看起来有点奇怪,但这是我为我的项目提供的规范。要四舍五入到 5 的下一个倍数,我也理解,但真正难倒我的是 4 和 9 的值。

我需要使用什么公式来获得这些数字,或者更容易分解数字,获取小数点前的值并根据我上面所说的标准做一个案例?

谢谢你的帮助!

4

2 回答 2

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 对模数的回答更合适。

于 2013-10-28T13:21:11.167 回答
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

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

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
于 2013-10-28T13:20:06.800 回答