我很难绕过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
每行给我更多的星号),我已经尝试将格式语句移动到它自己的标记行...我似乎无法得到我想要的输出。
我在这里缺少什么?
答案 0 :(得分:17)
Fortran格式语句定义为:
Fw.d
,其中w是总计使用的字符数,d是小数点后的字符数。在这里你要告诉它你需要一个浮点数,总共1个字符宽,小数点后2个字符,这显然是不正确的。所以,例如,要获得一个总共4个字符的浮点数,带有3个小数位,你可以写:
write(*, '(F4.3)') t*1E9
请参阅http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html
此外,我应该提到星号表示该号码无法以所述格式显示。
编辑:
添加以下乔治的评论:
“对于E格式,fieldwidth必须至少比小数点数多7,例如E15.8。指数为4,前导为0,可能为' - '。我通常会添加一个更多的空间,所以数字不能一起运行,E16.8“