У меня есть некоторые десятичные числа, которые мне нужно записать в текстовый файл с ведущими нулями, когда это необходимо. Я сделал некоторые исследования по этому поводу, и все, что я видел, предлагает что-то вроде:
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".
Что-то не так в моем понимании того, как это работает? Или существует ли какое-то другое ограничение этой техники, которое я нарушаю?
UPDATE: Хорошо, я изучил это еще немного, и это похоже на комбинацию отрицательного значения и формата I3.3
. Если VALUE является положительным, и у меня есть I3.3
, он будет ставить ведущие нули, как ожидалось. Если VALUE отрицательный, и у меня есть только I3
в качестве моего формата, я получаю правильный вывод значения, но он будет дополнен пробелами перед отрицательным знаком вместо заполнения нулями после отрицательного значения (так что -9.8765 выводится как "- 9.8765", но это ведущее пространство ломает то, что я использую .txt файл, так что это неприемлемо).