愛しの Fortran・3改

Fortran について気の向くままに綴ります

実数値を文字列に変換する関数

初回なのに、これまでのあらすじから。

Fortran 2008 で編集記述子 G0 が導入されて普段使いの書式仕様は (*(G0,1X))(*(G0)) で済むことに。しかし実数値の満足な出力には有効桁数の指定が必要。ならば書式仕様の方はそのままで、実数値は文字列に変換して出力項目にすればいいのでは…

(詳しくは 最新 Fortran 書式仕様 参照。)

そこで今回はとりあえず書いてみましょう。

MODULE MODULE

      USE, INTRINSIC :: IEEE_ARITHMETIC

      INTEGER, PARAMETER :: &
       R_ = IEEE_SELECTED_REAL_KIND(13)

      INTEGER, PARAMETER :: L_ = 132

CONTAINS

!
      FUNCTION F_(A,N,FMT) RESULT(RESULT)
      INTEGER, INTENT(IN) :: N
      REAL(R_), INTENT(IN) :: A
      CHARACTER(*), INTENT(IN) :: FMT
      CHARACTER(N) :: RESULT

      CHARACTER(MAX(L_,N)) :: LINE

      WRITE(LINE,FMT) A
      RESULT = LINE
      END FUNCTION F_

END MODULE MODULE

      PROGRAM PROGRAM
      USE :: MODULE

      WRITE(*,"(*(G0))") &
       '"', F_(12.3_R_,6,"(F0.2)"), '"'
      END PROGRAM PROGRAM

出力結果は「12.30」。 意図は実現できそうですが…

(つづく)