回 帖 发 新 帖 刷新版面

主题:Fortran中用科学计数法输出双精度实数时,如何让小数点前的一位不为零?

发现在Fortran中用科学计数法输出双精度实数时,如果指定科学计数法格式(如(1)和(2)行所示),则小数点前一位总是零,而matlab用科学计数法输出时,小数点前一位不是零。反而不指定Fortran科学计数法格式时(如Fortran代码(3)行所示),小数点前前一位倒不为零了,但这样的双精度有效数字是16位了,不是彭国伦书上说的15位了。
如何通过指定科学计数法格式,让Fortran输出的小数点前一位总不为零?
---------------Fortran代码------------------
program main
implicit none

real(8) :: h,h1
open(1,file='h.txt');
h=0.00000000123456d0
h1=-12345635468975462d0
write(1,'(E23.15E3)') h     !(1)
write(1,'(E23.15E3)') h1    !(2)
write(1,*) h1               !(3)
close(1)

end program

结果:
 0.123456000000000E-008
-0.123456354689755E+017
  1.234560000000000E-009
------------------------------------------

---------------Matlab代码-----------------
fid=fopen('C:\mattxt.txt','w');
h=0.00000000123456;
h1=-12345635468975462;
fprintf(fid,'%.14E\r\n',h)
fprintf(fid,'%.14E',h1)
fclose(fid);

结果:
1.23456000000000E-009
-1.23456354689755E+016
-----------------------------------------

回复列表 (共1个回复)

沙发

E23.15E3  变成 ES23.15E3

科学计数法(ES)的一般形式为:ESw.d[Ee]。它和E编辑描述符也基本类似,区别在于ES输出数据的非指数部分的绝对值强制在l到10的范围内,而非E的0到1的范围。

我来回复

您尚未登录,请登录后再回复。点此登录或注册