READ语句中的格式和实数舍入

1 format fortran

我试图在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)
Run Code Online (Sandbox Code Playgroud)

我试着阅读这些数字: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    
Run Code Online (Sandbox Code Playgroud)

我本来期望第一行给出0.001000000,第二行给出0.001054209,但似乎格式声明对读数没有影响或者我没有正确使用它.任何人都可以向我解释格式在读取功能中的效果以及如何正确使用它?

Vla*_*r F 5

阅读时不要使用.2编辑描述符的一部分.决不.它确实非常糟糕和混乱.永远放在那里.0.

它实际上做的是,当读取的数字包含小数点时,它什么都不做.到目前为止一切都很好.但如果数字不包含小数点,它将根据您的号码添加一个.

所以,如果你读

'1'

运用

read '(E10.2)', x
Run Code Online (Sandbox Code Playgroud)

x将成为0.01.

如果你阅读'1.0'使用相同的,它就会变成1.0.

令人困惑的是,我强烈建议.0在所有情况下使用真实的编辑描述符.


例如,为了舍入您的数字,您可以这样做

read '(E10.0)', x
x = aint(x*100)/100
Run Code Online (Sandbox Code Playgroud)