我很难理解 Fortran 中的格式化语句。
不格式化我的输出,这就是我所做的(在循环中,所以这会发生几次):
write(*,*) t*1E9
t
这里是 real*8
。输出正是我所期望的——增量为 0.1,有一些舍入误差:
0.0000000000000000
0.10000000000000001
0.20000000000000001
0.29999999999999999
0.40000000000000002
0.50000000000000000
0.59999999999999998
0.69999999999999996
0.79999999999999993
0.89999999999999991
0.99999999999999989
现在,我尝试添加格式声明:
write(*, '(F1.2)') t*1E9
并且(其他一切都相同)相反,我的输出中只有星号:
**
**
(etc...)
我试图了解这应该如何工作,但我无法弄清楚为什么会发生这种情况。我尝试了具有更多数字空间的格式(F15.15
只是给我每行更多的星号),我尝试将格式语句移动到它自己的标记行...我只是可以'似乎没有得到我想要的输出。
我在这里错过了什么?
最佳答案
Fortran 格式语句定义为:
Fw.d
,其中w是总共要使用的字符数,d是小数点后的字符数。在这里,您告诉它您需要一个 float ,总共 1 个字符宽,小数点后 2 个字符,这显然是不正确的。因此,例如,要获得一个总共 4 个字符、小数点后 3 位的 float ,您可以这样写:
write(*, '(F4.3)') t*1E9
见 http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html
另外,我应该提一下,星号表示该数字不能以所述格式显示。
编辑:
在下面添加乔治的评论:
"对于 E 格式,字段宽度必须至少比小数位数多 7,例如 E15.8。四个代表指数,两个代表前导 0。一个代表可能的 '-'。我通常加一个更多的额外空间,所以数字不会一起运行,E16.8"
https://stackoverflow.com/questions/15681735/