1

「79.85」、「1000」、「212.34」などの文字列を含むシーケンシャル ファイルを読み込みます。

英数字をこの形式の数値に変換したい 00000.00 ?

これらの数値を合計して、 0000000.00 の形式のフィールドに移動する必要があります。

私は試した:

01 WS_AMOUNT_TXT                                PIC X(8).
01 WS_AMOUNT                                    PIC 9(5).9(2).

MOVE WS_AMOUNT_TXT(1:8) TO WS_AMOUNT(1:8).

私が得たのは予想外で、文字列はまったく同じです。左揃えで、先行ゼロ表示はありません。

どうすれば右揃えになり、先行ゼロを持つことができますか?

編集: NealB による提案を試しましたが、残念ながら失敗しました:

01 WS_AMOUNT_NUM                                PIC 9(5)V9(2).
01 WS_AMOUNT_DISPLAY                            PIC 9(5).9(2).
01 WS_AMOUNT_TXT                                PIC X(8).


        DISPLAY WS_AMOUNT_TXT

        COMPUTE WS_AMOUNT_NUM = FUNCTION NUMVAL (WS_AMOUNT_TXT)
        MOVE WS_AMOUNT_NUM TO WS_AMOUNT_DISPLAY

79.85 << これは、DISPLAY WS_AMOUNT_TXT を呼び出してクラッシュしたときに表示されたものです。

%cob-f-numvalarginv、numvalまたはnumval-c引数無効な%trace-f-traceback、シンボリックスタックダンプは画像モジュールルーチンラインレルPC ABS PC DEC $ COBRTL 0 000000000001F2B8 00000000000000007C2F72B8 DEC $ COBRTL 0 00000000001474000000000000007C2000000000000000000000000000000000000000000000000000000 0000007C2ECC44 DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ 121 00000000000000000003C4 000000000003C4 DAYANY_SPLIT_REFUND_ADJ 0 000000000000000000027131313131313A0

4

2 に答える 2

4

組み込み関数NUMVAL を使用して変換を実行してみてください。何かのようなもの...

    01 WS-AMOUNT-TEXT     PIC X(8).  
    01 WS-AMOUNT-NUM      PIC 9(5)V9(2).  
    01 WS-AMOUNT-DISPLAY  PIC 9(5).9(2).  

    COMPUTE WS-AMOUNT-NUM = FUNCTION NUMVAL (WS-AMOUNT-TEXT)  
    MOVE WS-AMOUNT-NUM TO WS-AMOUNT-DISPLAY  

NUMVALは、数値のテキスト表現を数値タイプに変換します。計算では、数値データ型:を使用しPIC 9(5)V9(2)ます。次に、を使用MOVE して、数値結果を明示的な小数点付きの表示可能な量に変換します。

注:実行する計算が多い場合は、PACKED-DECIMAL効率を向上させるためにデータ型を使用するのが最適な場合があります。

于 2011-07-27T15:02:26.950 に答える