9(2) の値が "0" ではなく "1" として表示されることを期待していて、そうでない理由について混乱していると思いますか?
X 値から移動すると、値が左から右に移動します (移動先の値が変更されない限り)。したがって、9 の値にはスペースが含まれています。簡単にするために、「X(2) 値 '1 '」を 9(2) 値に移動すると、文字通りこれらの文字が移動します。スペースによって 9(2) の内容が無効になるため、COBOL コンパイラはそれを使用して、必要な処理を実行し、0 を返します。つまり、9(2) をそのように定義すると、コンパイラはデータを別の方法。
9(2) を「1」として表示するには、9(2) に正しい方法でデータを提示する必要があります。値が 1 の 9(2) の文字は "01" です。未テスト:
03 FOO PIC X(2) value '1'.
03 TEXT-01 PIC X(2) JUSTIFIED RIGHT.
03 NUMB-01 REDEFINES TEXT-01 PIC 9(2).
03 BAR PIC 9(2).
DISPLAY FOO.
MOVE FOO TO TEXT-01.
INSPECT TEXT-01 REPLACING LEADING ' ' BY '0'.
MOVE NUMB-01 TO BAR.
DISPLAY BAR.
あなたの例で BAR に対して NUMERIC テストを使用すると、同様に失敗するはずです...