SQLで割り算(除算)をすることがある。
消費税だったり、利益率だったり、パーセンテージなものから値を出したいときは多々ある。
消費税だったら、 原価 × ( 消費税率 / 100) で、消費税を出す。
しかし、何も考えずにこの計算式を実行していたら問題だった。
当たり前なのだが、消費税率に該当する部分が、整数型の場合、100%未満の場合は必ず0になる。
なので、ほぼ消費税が0となる。
プログラムで書くときは何となくキャストをしているが、SQL になると忘れていた。
DECLARE @intPer INT SET @intPer = 8 SELECT 1000 * (@intPer/100) ,@intPer/100 ; -- 0 0 SELECT 1000 * @intPer / 100 ,@intPer/100 ; -- 80 0 SELECT 1000 * CAST((@intPer/100) AS NUMERIC) ,@intPer/100 ; -- 0 0 SELECT 1000 * ( CAST(@intPer AS NUMERIC)/100) ,@intPer/100 ; -- 80.0000000 0 SELECT 1000 * ( CAST(@intPer AS FLOAT)/100) ,@intPer/100 ; -- 80 0
SQLも、プログラムと同じくキャストが必要。
もちろん、パーセンテージを入れる変数が、もともと小数点型であれば問題ない。
しかし、その場合は出力される値が小数点を含む可能性がある。
今回の場合、1円以下の小数点は切り捨てだったので、先に乗算した後、100で除算する方法を選んだ。
ちなみに、パーセンテージが0の場合は、除算するとすべて0となった。
0は何で割っても0という仕様のようだ。
ありがとうございました。税率計算が正確にできるようになりました。