必要に応じて先行ゼロを使用してテキストファイルに書き込む必要のある10進数がいくつかあります。私はこれについていくつかの調査を行いました、そして私が見たすべては次のようなものを示唆しています:
REAL VALUE
INTEGER IVALUE
IF (VALUE.LT.0) THEN
IVALUE = CEILING(VALUE)
ELSE
IVALUE = FLOOR(VALUE)
ENDIF
WRITE(*,1) IVALUE, ABS(VALUE)-ABS(IVALUE)
1 FORMAT(I3.3,F5.4)
私が理解しているように、IF
ブロックとABS
パーツは、-100 <VALUE <1000のすべての値に対してこれが機能することを許可する必要があります。を設定VALUE = 12.3456
すると、上記のコードは出力として「012.3456」を生成するはずです。ただし、のようなものがある場合はVALUE = -12.3456
、出力として「(3アスタリスク).3456」が表示されます。ステートメントに十分な文字が指定されていない場合、通常はアスタリスクが表示されますがFORMAT
、この例では3文字で十分です(「-」の場合は1文字、「12」の場合は2文字)。のようなものでこれをまだテストしていませんがVALUE = -9.876
、出力は「-09.8760」になると思います。
これがどのように機能するかについての私の理解に何か問題がありますか?それとも、私が違反しているこのテクニックの他の制限はありますか?
更新:さて、私はこれをもう少し調べました、そしてそれは負の値とI3.3
フォーマットの組み合わせのようです。VALUEが正で、私がを持っている場合I3.3
、期待どおりに先行ゼロが配置されます。VALUEが負でI3
、フォーマットとしてのみ使用している場合、正しい値が出力されますが、負の後にゼロが埋め込まれるのではなく、負の符号の前にスペースが埋め込まれます(したがって、-9.8765は「-9.8765」として出力されます。しかし、その先頭のスペースは、私が.txtファイルを使用しているものを壊しているので、受け入れられません)。