12

我很难理解 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每行只给我更多的星号),我尝试将格式语句移动到它自己的标记行...我似乎无法获得我想要的输出像。

我在这里想念什么?

4

1 回答 1

18

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 格式,字段宽度必须至少比小数位数多 7,例如 E15.8。四个用于指数,两个用于前导 0。一个用于可能的 '-'。我通常会多加一个空格所以数字不会一起运行,E16.8"

于 2013-03-28T15:13:11.410 回答