Fortran将我的输出转换为星号 - 为什么?

Tom*_*han 10 io formatting fortran

我很难在Fortran中围绕格式化语句.

没有格式化我的输出,这就是我做的(在循环内,所以这发生了几次):

write(*,*) t*1E9
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

现在,我尝试添加一个格式语句:

write(*, '(F1.2)') t*1E9
Run Code Online (Sandbox Code Playgroud)

和(其他一切相同)而不是我的输出中只有星号:

**
**
(etc...)
Run Code Online (Sandbox Code Playgroud)

我试着读一下它应该如何工作,我无法弄清楚为什么会这样.我已经尝试过有更多数字空格的格式(F15.15每行给我更多的星号),我已经尝试将格式语句移动到它自己的标记行...我似乎无法获得输出我是喜欢.

我在这里错过了什么?

phy*_*hun 17

Fortran格式语句定义为:

Fw.d,其中w是总共使用的字符数,d是小数点后的字符数.在这里你要告诉它你需要一个浮点数,总共1个字符宽,小数点后2个字符,这显然是不正确的.因此,例如,要获得一个总共4个字符的浮点数,带有3个小数位,您可以写:

write(*, '(F4.3)') t*1E9
Run Code Online (Sandbox Code Playgroud)

见http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html

此外,我应该提到星号表示该号码不能以所述格式显示.

编辑:

添加以下乔治的评论:

"对于E格式,fieldwidth必须至少比小数点数多7,例如E15.8.指数为4,前导为0,可能为' - '.我通常添加一个额外的空格所以数字不能一起运行,E16.8"

  • 对于E格式,fieldwidth必须至少比小数位数多7,例如E15.8.四个为指数,两个为前导0.一个为可能的' - '.我通常会增加一个额外的空间,所以数字不能一起运行,E16.8 .. (4认同)