2012-11-05 58 views
1

我在COBOL的DIVIDE動詞的其餘部分有這個奇數輸出。 目標只是將213.20除以10,然後將商數除以另一個變量以及餘數。我期待在餘下的部分有3.2的價值,但它只是給了我0請賜教。在Cobol中劃分動詞

見下面的代碼片段:

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 

回答

3

的問題是後您已經定義接收變量VAR-C有2位數小數點。我想你想整除,所以儘量將其定義如下:

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

現在VAR-C只能容納整數,其餘(VAR-D)將含有殘留(如3.20)

(如21)。
1

如果您的剩餘PIC不符合除數PIC,我在過去看到了奇怪的結果。將您的剩餘部分更改爲PIC S9(9)V99併發布結果。

+2

只要剩餘的大小至少是除數的餘數,餘數的精度至少是除數和餘數的餘數,餘數將是準確的。在OP的情況下,滿足這些條件 。問題在於除數的精度等於股息 剩下零餘數。如果符合精度/宏觀條件的要求爲 ,則以下等式適用:「股息/除數=商數+餘數」和 「商數*除數+餘數=股息」。如果這種關係失敗,則在一個或多個變量中存在精度/宏觀失配。 – NealB