1

我目前在 FORTRAN 77 中搞乱,我遇到了一个我似乎无法弄清楚的问题。我正在尝试从类似于以下内容的文件中读取:

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)

一切似乎都读得很好,除了最后一列。当我检查价格的值时,例如,第二行;我得到的不是 56.95,而是 56.8999999999。

现在,我知道我可能有尾随的 9 或诸如此类的东西,因为它并不完全精确,但它不应该更接近 95 美分吗?也许我做错了什么,我不确定。希望我不会被这样运行的程序卡住!任何帮助是极大的赞赏!

4

1 回答 1

1

这正是您用来读取文件的代码吗?你有“X”格式来对齐列吗?如 (I11, A25, 2X, I7, 3X, I6, 3X, F5)(有补值)。如果您将对齐方式减一并且仅读取“56.9”为“56.95”,那么浮点不精度很容易给您56.89999,非常接近56.9

您还可以将行读入字符串并从子字符串中读取数字——这只需要精确识别字符串的位置。一旦子字符串只包含空格和数字,您就可以使用不那么挑剔的 IO 定向读取:read (string (30:80), *) qty, min_qty, price。

于 2010-06-30T15:07:50.223 回答