10 進数による演算の精度

Db2 は、10 進数を使用した演算の結果の精度と位取りを決定するために、2 つの規則セットを受け入れます。

  • DEC15 規則を使用した場合、 演算の結果に最大 15 桁までの精度が適用されます。 DEC15 規則が有効になるのは、 両方のオペランドの精度が 15 以下であるか、DEC31 規則が 適用されない場合に限ります。
  • DEC31 規則を使用した場合、結果は 最大 31 桁までの精度が適用されます。 DEC31 規則が有効になるのは、 以下の条件のいずれかに該当する場合です。
    • 演算のオペランドのいずれかが 15 桁を超える精度の場合。
    • 演算が動的 SQL ステートメントで行われ、次の条件のいずれかに該当する場合。
      • 特殊レジスタCURRENT PRECISIONの現在の値は、 DEC31 または D31.s です。ここで、 s は1~9の範囲の数値であり、除算演算に使用される最小のスケールを表します。
      • パネル上の小数演算の設置オプションは、 DSNTIP4DEC31、31、 または D31.s (sは 1~9の範囲内の数値)です。パネル上の「USE FOR DYNAMICRULES」のインストールオプションは DSNTIP4 YES、および、アプリケーションによってCURRENT PRECISIONの値が設定されていない。
      • SQL ステートメントに、バインド、定義、または呼び出しの動作があり、 そのステートメントがオプション DEC(31) 指定でプリコンパイルされたアプリケーション内にあり、 パネル DSNTIP4 の「USE FOR DYNAMICRULES (動的規則に使用)」インストール・オプション が NO であり、かつ CURRENT PRECISION の値をアプリケーションが設定していない。 バインド、定義、および呼び出しの動作については、 動的SQL文の動的ルールオプションを参照してください。
    • この操作は、DEC(31)、 DEC31、または D31.sオプション、あるいはインストールオプションDECIMAL ARITHMETICが DEC31 または31の場合のデフォルトオプションで事前にコンパイルされた埋め込み(静的)SQLステートメントです。sは 1~9の範囲の数値であり、除算操作で使用される最小の小数点以下の桁数を表します。 事前コンパイルに関する情報および事前コンパイラの全オプションのリストについては、「プログラム準備のためのSQL文の処理」 を参照してください。

推奨事項: オーバーフローの可能性を減らすため、または 15 桁を超える精度を扱う場合は、 DEC31 または D31.s を選択します。ここで、 s 1 ~ 9 の範囲の数値であり、除算演算に使用する最小スケールを表します。