我有一个真实的CURRENTTIME
我想转换为名为TIMEDIR
的字符串。由于TIMEDIR
必须改变大小,因此它是可分配的。据我所知,分配工作正常。另外,我检查了CURRENTTIME
是否有值。
ALLOCATE(CHARACTER(LEN=1)::TIMEDIR)
WRITE(TIMEDIR, '(F1.0)') CURRENTTIME
但是
WRITE(*,*) TIMEDIR
输出*
,其中应为0
(CURRENTTIME
为0.0000000)。我不知道问题是什么。
答案 0 :(得分:3)
您将输出写为浮点数。浮点数始终具有小数点或指数,以区分它们与整数。因此,浮点数的最窄输出可能是0,即2个字符,F1.0的格式将始终导致打印“*”,因为字段宽度不足以写入正在写入的内容。
答案 1 :(得分:2)
Ian Bush's answer说明了你需要知道的事情:使用F
编辑描述符输出实际值需要至少为2的字段宽度。我将在其他方面详细说明。< / p>
你提到
由于
TIMEDIR
必须改变大小,因此可以分配
但是在我们看到的代码片段中
WRITE(TIMEDIR, '(F1.0)') CURRENTTIME
这表明存在一点误会。 [可能没有混淆,但我会为了任何其他读者提出问题而努力。]
如果Fw.d
的输出格式大于零w
,则输出字段的宽度总是 w
。这个“总是”意味着:无论相应变量的值如何,上面write
语句对TIMEDIR
的影响都是单个字符为非空白。
现在,与其他答案一样,2是输出实数值 [1] 的最小字段宽度。与所有其他数字输出格式一样,如果字段对于相应的值不够宽,则该字段完全由*
s组成。 F1.0
将始终生成输出*
。如果您想要输出0.
(或0,
) [2] ,则需要F2.0
。
回到“TIMEDIR
的不同大小”,输出格式F2.0
(可能)足以使CURRENTTIME
的非负值小于10,但对于负值或值不小于10不是。很可能这就是F0.d
进来的地方。只有F
编辑描述符的这种形式,字段的宽度取决于输出值。不过,这可能是另一个问题的答案。
最后,正如你提到的那样
我必须找出如何从“0”中取出“0”。
我会指出你需要做一些额外的逻辑,比如mentioned elsewhere。
1 即使是零值,2也可能不够:print '(SP,F2.0)', 0.
2 0.
和0,
的选择取决于小数模式:print '(DC,F2.0,DP,F2.0)', 0., 0.