• 締切済み

DECIMALを使った計算式のオーバーフロー

(A * 100 /((B / C) * D) -0.05) という式を作っています。 型は以下の通りになります。 A の型:DECIMAL(18,7) B の型:DECIMAL(15,0) C の型:DECIMAL(5,0) D の型:DECIMAL(3,0) 結果を小数点第1まで表示したいけど、このままだとB がDECIMAL(15,0)の為小数点以下が出ないので、 とりあえずBをAと同じ型CAST(B as decimal(18,7))とうい風にキャストして小数点以下を出しています。 (A * 100 /((CAST(B as decimal(18,7))/ p_kadou_m) * p_kadou_to) -0.05) 今はうまく動作しているのですが、オーバーフローが出ないか心配しています。 オーバーフローを発生させないようにするにはどこを配慮したら良いのでしょうか。 CASTしているBの桁は今、桁は(18,7)にしているのですが、何が最適になるのでしょうか。

みんなの回答

回答No.1

コンパイラがどこのメーカーの何という製品なのか分からなければ、誰も答えられません。 コンパイラにより中間結果の精度、尺度が決められるので、これはコンパイラのマニュアル等を見なければ確かなことは分かりません。 また、実際に入るであろうデータの範囲は、事前に分かるのが一般的ではないですか? それに対して現状の宣言は、ぎりぎりになっているのですか?