Ian Bush's answer говорит, что вам нужно знать: вывод для реального значения с использованием дескриптора F
требует ширины поля не менее 2. Я немного опишу некоторые другие аспекты.
Вы упоминаете
Как TIMEDIR
должен изменить размер это размещаемый
но во фрагменте кода мы видим
WRITE(TIMEDIR, '(F1.0)') CURRENTTIME
Это предполагает небольшое недоразумение. [Может случиться, что нет путаницы, но я постараюсь понять, что любой другой читатель подходит к этому вопросу.]
Когда выходной формат выглядит как Fw.d
для w
больше нуля, чем ширина выходного сигнала поле всегдаw
. Это «всегда» означает: независимо от значения соответствующей переменной, эффект выражения write
выше на TIMEDIR
должен содержать один символ без пробела.
Теперь, как и в этом другом ответе, 2 является минимальной шириной поля для вывода действительного значения [1]. Как и при любом другом форматировании с числовым выходом, если поле недостаточно велико для соответствующего значения, поле полностью состоит из *
с. F1.0
всегда приведет к выходу *
. Если вы хотите получить 0.
(или 0,
) [2] вам понадобится F2.0
.
Возвращаясь к «переменному размеру TIMEDIR
», выходной формат F2.0
является (возможно) достаточно для неотрицательных значений CURRENTTIME
менее 10, но и для отрицательных значений или значений не менее 10 это не так. Вполне возможно, что здесь находится F0.d
. Только в этой форме дескриптор редактирования F
определяет, что ширина поля зависит от выходного значения. Это, вероятно, ответ на другой вопрос.
Наконец, как вы упоминаете
Я должен узнать, как сделать «0» из «0»
Я укажу, что вы ищете необходимость в дополнительной логике, например mentioned elsewhere.
и 2 не может быть достаточно, даже для нулевого значения: print '(SP,F2.0)', 0.
Выбор 0.
и 0,
зависит от десятичного режима: print '(DC,F2.0,DP,F2.0)', 0., 0.
Вы уверены, что TIMEDIR имеет ценность? – parik
да, он имеет значение «*» ... –