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