2011-07-27 51 views
0

我將讀取一個包含一些字符串(如「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 000000007C2F72B8 DEC $ COBRTL 0 0000000000014764 000000007C2EC764 DEC $ COBRTL 0 0000000000014C44 000000007C2ECC44 DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ 121 00000000000003C4 00000000000303C4 DAILY_SPLIT_REFUND_ADJ 0 00000000000313A0 00000000000313A0 0 FFFFFFFF80271EF4 FFFFFFFF80271EF4

+1

它失敗了,因爲無論是在WS_AMOUNT_TXT不能轉換爲有效數值。除了數字,小數點和/或空格外,您在該字段中還有一些「垃圾」。在嘗試轉換之前清理WS_AMOUNT_TXT。 – NealB

回答

1

嘗試使用固有功能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數據類型來提高效率。

+0

它失敗了,我會稍後更新問題。 – lamwaiman1988

0

使用重新定義。

01 WS-AMOUNT-TXT-GRP。 03 WS-AMOUNT PIC X(4)。 01 WS-AMOUNT-NUM REDEFINES WS-AMOUNT-TXT-GRP PIC 9(4)。

後在WS-金額-TXT-GRP或WS-流量的再= licating值,自動值將複製WS-金額-NUM

+0

你讀過這個問題了嗎?輸入是左對齊的「數字」,可能包含實際的小數點。他們需要加在一起。您的建議將無法使用。 –

相關問題