2016-07-28 60 views
4

我在文件中有定點數字,每行一個,這種格式S9(6)V9(2)但是當它們被實際讀取時,我在嘗試將它們放入數學時遇到了non numeric錯誤操作。更重要的是,當我嘗試在程序中顯示它們時,寫入文件中的數字爲567123.45被保存在變量中,如+ 567123.04。例如,文件123.45中的數字被保存在變量+123.45.00中,並在數學運算過程中引發以下錯誤'WS-VALUE' not numeric: '123.45 0'。這是爲什麼? 我正在使用OpenCobolIDE 4.7.4 for Windows。在COBOL中讀取文件中的浮點數

編輯: 文件已被新行分隔下面的表格記錄(通過READ操作記錄記錄後,讀):

01 WS-OPERATION. 
    05 WS-ID PIC A(2). 
    05 WS-CLIENT PIC 9(5). 
    05 WS-COUNTRY PIC A(4). 
    05 WS-VALUE PIC S9(6)V9(2). 
+0

第一:這些不是浮點項,因爲只有'USAGE FLOAT ...'是浮點項。這些實際上是固定點項目。 問題: 你使用什麼編譯器?我假設這個標準出貨了GnuCOBOL 1.1 - 如果你改變了編譯器路徑,你可以在菜單中找到這個信息? - >關於OpenCobolIDE。 您如何閱讀該文件,該文件及其記錄說明是怎樣的? 「DISPLAY」語句是怎麼樣的? –

+0

是的,我正在使用版本1.1.0。我編輯了關於文件結構的文章。 – Quentin

+0

我強烈建議將「浮點」部分編輯爲「定點」。 –

回答

5

的原因是,您嘗試取消編輯的字段。數據中的567123.45不符合PIC S9(6)V9(2),而是-9(6).9(2). - 內部存儲的數據與打印數據。

簡單改變的定義和使用MOVE WS-VALUE TO WS-VALUE-INTERNAL(其定義像你想)可以與特定的編譯器(和具體數據)的工作,但我會去不同的路線:

我建議到總是驗證數據之前做一些事情(該文件可能會損壞或外部編輯)。 至少檢查簡單的數字數據,如WS-CLIENT,對於IS NUMERIC,並對數據字段WS-VALUE或至少使用MOVE FUNCTION NUMVAL(WS-VALUE) TO WS-VALUE-INTERNAL進行全面驗證。