COBOL の世界では、数値データ型を "deedit" しようとしています。
「数値」を保持するPIC X(10)
フィールドを指定して、それを数値データ型に変換します。この「数値」が常に同じ形式 (7 桁、小数点、小数点以下 2 桁) であることが常に保証されている場合、COBOL でこれを行う従来の方法は次のとおりです。
01.
02 NUM-AS-PIC PIC X(10).
03 NUM-EDITED REDEFINES NUM-AS-PIC PIC 9(7).99.
01 NUM-DEEDITED PIC 9(7)V99.
MOVE '1234567.89' TO NUM-AS-PIC <- alpha-numeric move
MOVE NUM-EDITED TO NUM-DEEDITED <- deediting numeric move
ADD 1 TO NUM-DEEDITED <- numeric computation
MOVE NUM-DEEDITED TO NUM-EDITED <- recover explicit decimal (editing)
DISPLAY NUM-AS-PIC <- alpha-numeric display
主な欠点は、柔軟性があまりないことです。NUM-AS-PIC
正確に正しい形式が含まれていることを常に確認する必要があります。例えば
MOVE '123.45' TO NUM-AS-PIC
小数点以下の位置が正しくない (右側ではなく左側から埋められる) ため、実行時エラーが発生MOVE
し、残りの 4 バイトを構成した後に末尾のスペースが埋め込まれます (スペースは有効な数値ではありません)。
別の一般的な方法は、NUMVAL
関数を使用することです。この関数は、編集された有効な数値形式を取り、それを浮動小数点数値表現に変換します。数値には、先頭または末尾にスペースが追加されている場合があります。の結果はNUMVAL
、任意の有効な数値データ型に割り当てることができます。例えば:
MOVE '1234567.89' TO NUM-AS-PIC <- alpha-numeric move
COMPUTE NUM-DEEDITED = FUNCTION NUMVAL(NUM-AS-PIC)
今
MOVE '123.45' TO NUM-AS-PIC
COMPUTE NUM-DEEDITED = FUNCTION NUMVAL(NUM-AS-PIC)
も有効な動きになります。NUM-AS-PIC
ただし、 に含まれる値を有効な浮動小数点数に変換できない場合は、実行時エラーが発生します。例えば:
MOVE '12A.23' TO NUM-AS-PIC
COMPUTE NUM-DEEDITED = FUNCTION NUMVAL(NUM-AS-PIC)
それでも実行時エラーが発生します。
悲しいニュースは、COBOL でこれを行う一般的に簡単な方法や確実な方法がないことです。