| 本帖最后由 vvt 于 2022-5-4 22:11 编辑 
 实际上,后面是用0填充的,但是它是二进制的 0 填充,输出时转换成10进制,就不是0了。
 
 对于这个问题,首先你要知道。单精度的 x = 3.14159,实际上就不是准确的 3.14159,而是 3.14159011840820......  请理解,浮点数均有误差,而单精度只有6-7位有效数字(严格说约6.9位)
 
 对比一个例子,假如有个文明使用三进制,它们的 0.1(1/3) 表示成十进制就是 0.3333333...
 如果我们增大有效位数,变成 0.333333300000000,再转换成三进制,是不是就出现不整位数了?
 
 对于计算机来说,要实现十进制的有效位数保留,效率比较低。大多数时候,我们选择输出时保留一定的位数。
 对于你这样的要求,你有两种实现:
 1. 你需要保留固定的小数位数,且数字不大。比如你要保留6位小数。
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode   real :: x
  real(8) :: y
  y = nint(1.d6*x)/1.d6
  write(*,*) x, y2. 你要保留固定的有效位数。比如保留7位有效数字。借鉴楼上的方法。(请注意,单精度只有6.9位有效数字,所以你不能保留8位或更多有效数字)
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode   y=real4real8(x)
  write(*,*) x, y
  function real4real8(r4)result(r8)
      real,intent(in)::r4
      real(8)::r8
      character(len=15)::str
      write(str,"(ES13.6E2)")r4 !此处的 es13.6 的 6 为保留有效数字-1,即7-1=6
      read(str,*)r8
  end function real4real8楼上写的es15.8,显然超过了单精度的有效数字。
 
 
 |