2016-07-28 30 views
4

各行に1つずつ、この形式の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をWindows用に使用しています。COBOLでファイルから浮動小数点数を読み取る

EDIT: ファイルは改行で区切られ、次の形式のレコードを持っている(レコードの後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の標準出荷を前提としています - コンパイラのパスを変更した場合、この情報はメニューから見つけられますか? - > About 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を使用特定のコンパイラ(特定のデータ)とのかもしれ仕事は、私は別のルートを行くだろう:

私がお勧めしたいですは、何かを行う前にデータを常に検証します(ファイルが壊れているか、外部で編集されている可能性があります)。 のような単純な数値データをIS NUMERICにチェックし、データフィールドWS-VALUEまたは少なくともMOVE FUNCTION NUMVAL(WS-VALUE) TO WS-VALUE-INTERNALを完全に検証します。

関連する問題