我有一些十进制数字需要在适当的时候写入带有前导零的文本文件。我对此进行了一些研究,我所看到的一切都表明:
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”有两个字符)。我还没有用类似的东西对此进行测试VALUE = -9.876
,但我希望输出为“-09.8760”。
我对它的工作原理的理解有什么问题吗?还是我违反了这种技术的其他限制?
更新:好的,我已经对此进行了更多研究,它似乎是负值和I3.3
格式的组合。如果 VALUE 为正并且我有I3.3
,它将按预期放置前导零。如果 VALUE 是负数并且我只有I3
作为我的格式,我会得到正确的值输出,但它会在负号之前用空格填充,而不是在负号之后用零填充(所以 -9.8765 输出为“-9.8765”,但是那个前导空格破坏了我使用 .txt 文件的目的,所以这是不可接受的)。