1

ある通貨から他の複数の通貨に換算する予定の価格がありますが、換算後に特定の数値に丸めたいと考えています。

丸める必要があるものの例は次のとおりです。

10 未満は次の桁に丸められます。これには、CEILING 関数を使用するだけです。10 ~ 14 の範囲は、14.00 に丸める必要があります。例: 12.78 から 14.00 14.01 から 15 の間は、15.00 に丸める必要があります。ex: 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 の値です。

これらの数値を取得するには、どの式を使用する必要がありますか、または数値を分解して小数点の前の値を取得し、上記の基準に基づいてケースを実行する方が簡単でしょうか?

ご協力いただきありがとうございます!

4

2 に答える 2

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または、 s から s に変換し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
于 2013-10-28T13:20:06.800 に答える
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 に答える