2

COBOL の DIVIDE 動詞の残りの部分に、この奇妙な出力があります。目標は、213.20 を 10 で割り、その商を別の変数と余りに保存することです。残りの部分の値が 3.2 になることを期待していましたが、0 になりました。教えてください。

以下のコード スニペットを参照してください。

WORKING-STORAGE SECTION.
    01 VAR-A  PIC S9(09)V99 COMP-3 VALUE 213.20
    01 VAR-B  PIC S9(09)V99 COMP-3 VALUE 10.00
    01 VAR-C  PIC S9(09)V99 COMP-3 VALUE 0.
    01 VAR-D  PIC S9V99     COMP-3 VALUE 0.  

PROCEDURE DIVISION.
MAIN-PARAGRAPH.
    DIVIDE VAR-A
      BY VAR-B
      GIVING VAR-C
      REMAINDER VAR-D.

    DISPLAY 'VAR-A: 'VAR-A.
    DISPLAY 'VAR-B: 'VAR-B.
    DISPLAY 'VAR-C: 'VAR-C.
    DISPLAY 'VAR-D: 'VAR-D.
********************************************
RESULTS:

VAR-A: 00000021320
VAR-B: 00000001000
VAR-C: 00000002132
VAR-D: 000
4

3 に答える 3

4

VAR-C問題は、小数点以下2桁で受信変数を定義したことです。整数除算が必要だったと思うので、次のように定義してみてください。

01 VAR-C    PIC S9(09) COMP-3.

VAR-Cこれで、整数(例:21)のみを保持でき、余り(VAR-D)には剰余(例:3.20)が含まれます。

于 2012-11-06T16:50:00.623 に答える
1

残りの PIC が除数の PIC と一致しない場合、奇妙な結果が過去に見られました。残りを PIC S9(9)V99 に変更し、結果を投稿してください。

于 2012-11-07T03:53:19.600 に答える
1

これは役立つかもしれません、誰かが同様の問題を抱えていました:

http://www.ibmmainframes.com/about44677.html

于 2012-11-05T12:48:40.073 に答える