1

私は現在FORTRAN77をいじっていて、理解できないような問題に遭遇しました。以下のようなファイルから読み込もうとしています。

000120     Description(s) here       18     7     10.15
000176     Description(s) here       65     20    56.95
...

各行の最後の列は金額です(100を超えることはありません)。以下のようなコードを使用してファイルを読み取ろうとしています

          integer pid, qty, min_qty
          real price
          character*40 descrip

          open(unit=2, file='inventory.dat', status='old')
          read(2, 100, IOSTAT=iend) pid, descript, qty, min_qty, price
100       format(I11, A25, I7, I6, F5)

最後の列を除いて、すべてがうまく読まれているようです。たとえば、2行目の価格の値を確認すると、56.95を取得する代わりに、56.8999999999のようなものを取得します。

完全に正確ではないため、9が続く可能性があることは理解していますが、95セントに少し近づける必要がありますか?たぶん私が間違っていることがあるのか​​、よくわかりません。うまくいけば、私は自分のプログラムがこのように実行されていることに固執していません!どんな助けでも大歓迎です!

4

1 に答える 1

1

それはまさにファイルを読み取るために使用するコードですか? 列を揃えるための「X」形式はありますか? (I11、A25、2X、I7、3X、I6、3X、F5) など (構成値あり)。アライメントを 1 ずらして、"56.95" に対して "56.9" だけを読み取った場合、浮動小数点の不正確さにより、56.9 に非常に近い 56.89999 が簡単に得られます。

行を文字列に読み込んで、部分文字列から数字を読み取ることもできます。これには、文字列の位置を正確に特定するだけで済みます。部分文字列にスペースと数字のみが含まれていれば、より扱いにくい IO 指示読み取りを使用できます: read (string (30:80), *) qty, min_qty, price.

于 2010-06-30T15:07:50.223 に答える