宽度为零的格式描述符,如 F0.6 或 G0.8

Format descriptors with zero width, like F0.6 or G0.8

fortran 格式说明符的标准文档解释了如何使用两个参数控制大多数格式,通常称为 wd。例如,格式说明符 Fw.d 表示将打印出宽度为 w 个字符(包括小数点)和小数点右侧 d 位数字的数字。 G 格式类似,只是 d 被解释为要打印的有效数字位数。

到目前为止我找到的所有文档都使用 w > 0 的示例,但我最近了解到 here 您可以在格式说明符中使用零作为宽度参数,这对于 CSV 输出之类的东西非常有用。似乎 w=0 被解释为 "variable width" 并且您根据需要获得尽可能多或尽可能少的 space 以满足 d 参数(它为 F 提供小数位G 格式的格式和有效数字)。例如,这里的 F 格式有不同的值(并且 "b" 表示一个空白字符):

! tested with gfortran 5.5 on linux

print '(F8.3)', 7.777   ! prints bbb7.777
print '(F4.3)', 7.777   ! prints ****
print '(F0.3)', 7.777   ! prints 7.777

这一切似乎都有道理。 G 让我有点困惑,因为 G8.3 没有任何空格,我不知道为什么 G4.3 失败,但无论如何它在这里:

print '(G8.3)', 7.777   ! prints 7.78
print '(G4.3)', 7.777   ! prints ****
print '(G0.3)', 7.777   ! prints 7.78

我的问题是我通过反复试验得出的理解是否正确,这是否在任何地方都有记录,它是否是 Fortran 标准的一部分,或者它是否特定于实现?

(我花了很多时间谷歌搜索此信息但找不到任何东西,可能是因为我不知道要使用什么搜索词。)

是的,这是标准的 Fortran 95 行为。 Fortran 2018 版本 (N2146 13.7.2.1 (6)):

On output, with I, B, O, Z, D, E, EN, ES, EX, F, and G editing, the specified value of the field width w may be zero. In such cases, the processor selects the smallest positive actual field width that does not result in a field filled with asterisks. The specified value of w shall not be zero on input.

还有 G0 通用编辑 (F2018 13.7.5),可用于任何提到的内部数据类型,并在 Fortran 2008 中引入。它包括所有数字类型和逻辑 ( L1) 和字符 (A).