我正在尝试使用FORTRAN 77中的format语句来定义我想要读取数字的精度。
以下是我的代码行:
double precision x,y,z
open(u,FILE='points.dat',STATUS='OLD')
do 10 i=1,n
read(u,100) x,y,z
write(*,*),'check', x,y,z
enddo
100 format(3(2x,D14.2))
close(u)
我试着读这些数字:1.0542095e-03 -3.4176819e-02 -1.3796906e-01 格式不同,结果如下:
format(3(2x,E14.2)): check 0.0010542095 -0.034176819 -0.13796906
format(3(2x,E14.7)): check 0.0010542095 -0.034176819 -0.13796906
format(3(2x,D14.7)): check 0.0010542095 -0.034176819 -0.13796906
我原本期望第一行给出0.001000000,第二行给出0.001054209,但似乎格式语句对阅读没有影响或者我没有正确使用它。任何人都可以向我解释格式在读取函数中的效果以及如何正确使用它?
答案 0 :(得分:5)
阅读时不要使用编辑描述符的.2
部分。决不。它确实非常糟糕和混乱。始终放在那里.0
。
它实际上做的是,当读取的数字包含小数点时,它什么都不做。到目前为止一切都很好。但如果数字不包含小数点,它将根据您的号码添加一个。
所以如果你读了
'1'
read '(E10.2)', x
x
将成为0.01
。
如果您使用相同内容阅读'1.0'
,则会变为1.0
。
令人困惑的是,我强烈建议在所有情况下在真实的编辑描述符中使用.0
。
例如,为了舍入您的数字,您可以
read '(E10.0)', x
x = aint(x*100)/100