切り捨て

前述のとおり、データ項目に USAGE COMP 句を指定すると、データは 2 進数の形式で保持される。データ項目に割り当てられる記憶域は、PICTURE 句で指定した数値に必要な分よりも大きくなることがある。たとえば、PIC 99 COMP と指定したデータ項目には通常、1 バイトが割り当てられるが、1 バイトは 255 までの数を保持できる。

ANSI COBOL の規則に準拠するために、数値はその形式にかかわらず、10 進数として処理される。算術文では、結果の値が受け取り側のデータ項目の PICTURE 句よりも大きい場合、桁あふれが発生する。その際、ON SIZE ERROR が指定してあると、結果は受け取り側の項目には格納されない。非算術文では、受け取り側の項目の方が大きさが小さい場合、切り捨てが発生する。その場合、結果の値は、受け取り側の PICTURE 句の指定よりも大きい左側の部分が切り捨てられる。

OSVSVSC2MF  ただし、USAGE COMP 句を指定したデータは 2 進数として処理される。この場合、切り捨ては、割り当てられた記憶域にデータを収めるために必要な際にのみ発生する。USAGE COMP 項目の動作は、COBOL コンパイラ指令 TRUNC の設定によって制御する。この指令により、PICTURE のサイズに合わせて 10 進値を切り捨てるか、利用可能な記憶域に合わせて 2 進値を切り捨てるかを選択できる。その切り捨て処理が行われる際に、算術文の結果、および非算術文によって転記されるデータは区別される。

指令の設定にかかわらず、算術文が実行された結果、得られた数値の 10 進の桁数が受け取り側のデータ項目の PICTURE 句の指定よりも大きい場合、桁あふれ条件が発生する。