5

fortran で任意の浮動小数点文字列を実数に変換する簡単な方法はありますか? 次のようなことを考えてくださいstrtod。ステートメントの問題READは、すべての浮動小数点形式の編集記述子が明示的な幅を必要とすることです。これまでのところ、私が行った最善の回避策は次のようなものです。

pure function strtod(s)
  real(kind=8) :: strtod
  character(len=*), intent(in) :: s
  character(len=32) :: fmt
  integer :: dot
  dot = index(s, ".")
  if(dot < 1) then
     write(fmt, '("(F",I0,".0)")'), len_trim(s)
  else
     write(fmt, '("(F",I0,".",I0,")")'), len_trim(s), len_trim(s)-dot
  end if
  read(s,fmt), strtod
end function strtod

しかし、何かが足りないのではないかと思っています。それを行うためのより良い方法はありますか?

4

1 に答える 1

2

私は何かが欠けているに違いありません。リスト指示でそれを行うことの何が問題になっていますか?

[luser@cromer stackoverflow]$ cat char2.f90
Program char2

  Implicit None

  Integer, Parameter :: wp = Selected_real_kind( 12, 70 )

  Real( wp ) :: a

  Character( Len = 32 ) :: s

  s = '0.'
  Read( s, * ) a
  Write( *, * ) a

  s = '1e10'
  Read( s, * ) a
  Write( *, * ) a

End Program char2
[luser@cromer stackoverflow]$ nagfor -C=all -C=undefined char2.f90
NAG Fortran Compiler Release 5.3.1 pre-release(904)
[NAG Fortran Compiler normal termination]
[luser@cromer stackoverflow]$ ./a.out
   0.0000000000000000
   1.0000000000000000E+10
于 2012-11-21T14:37:08.367 に答える