Gen*_*ike 14 formatting fortran
我有一些十进制数字,我需要在适当的时候写入带有前导零的文本文件.我对此做了一些研究,我见过的所有内容都表明:
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)
Run Code Online (Sandbox Code Playgroud)
根据我的理解,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文件,所以这是不可接受的).
Vla*_*r F 16
问题在于整数数据编辑描述符.随着I3.3你至少需要3个数字和字段宽度只有3没有为减号的地方.使用I4.3或,在Fortran 95及更高版本中I0.3.
回答您的编辑:使用I0.3,它使用必要的最少字符数.
但最后,你可能只想要这个: WRITE(*,'(f0.3)') VALUE