从FORTRAN 77中的文件中读取REAL - 奇怪的结果

时间:2010-06-30 14:04:51

标签: file file-io floating-point fortran fortran77

我目前在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美分吗?也许有些事情我做错了,我不确定。希望我不会坚持我的程序运行这样!非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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。