ゼロによる除算エラーの処理

ゼロによる除算は、「Query ファイルのオープン (OPNQRYF)」コマンドではエラーとみなされます。 ただし、ゼロの結果を受け取り、ゼロ除算エラーを防ぐことができます。

通常、レコード選択はフィールド・マッピング・エラーが発生する前に行われます。 したがって、 ゼロによる除算エラーの原因となった レコードを除外することができ、この場合では、OPNQRYF コマンドによる処理は継続します。 答えをゼロにしたい場合には、通常の商業データに実際に使用できる以下のような方法があります。

A を B で除算して C を得たいとします (式で表すと、A / B = C となります)。 以下の定義で、B はゼロの場合があるとします。

フィールド 数字 DEC
A 6 2
B 3 0
C 6 2
以下の算法を使用することができます。
(A * B) / %MAX((B * B) .nnnn1)

%MAX 関数は、B * B または最小値のうち、大きい方を返します。 最小値には十分な桁数のゼロを先行させ、B がゼロでない限り B * B で計算される すべての値よりも小さくなるようにしなければなりません。 この例では、B の小数点以下の桁数がゼロ なので、.1 を使用できます。 先行ゼロの数は、B の小数部の桁数の 2 倍にする必要があります。 例えば、B に小数点以下の桁数が 2 桁の場合は、.00001 を使用する必要があります。

以下の MAPFLD 定義を指定します。
MAPFLD((C '(A * B) / %MAX((B * B) .1)'))

最初の乗算の目的は、B がゼロの場合に被除数をゼロにすることです。 このようにすると、除算が行われたときに、結果がゼロになります。 B がゼロの場合には除数として .1 が使用されるので、ゼロによる除算は起こりません。