主题: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
-----------------------------------------
如何通过指定科学计数法格式,让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
-----------------------------------------