使用零宽度格式化描述符,例如 F0.6 或 G0.8

Joh*_*hnE 5 fortran gfortran

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

到目前为止,我找到的所有文档都使用wis > 0 的示例,但我最近在这里了解到,您可以在格式说明符中使用零作为宽度参数,这对于 CSV 输出之类的内容非常有用。似乎w=0被解释为“可变宽度”,并且您可以根据需要获得尽可能多或尽可能小的空间,以满足参数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
Run Code Online (Sandbox Code Playgroud)

这一切似乎都有道理。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
Run Code Online (Sandbox Code Playgroud)

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

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

Vla*_*r F 4

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

在输出时,通过 I、B、O、Z、D、E、EN、ES、EX、F 和 G 编辑,字段宽度 w 的指定值可能为零。在这种情况下,处理器会选择不会导致字段填充星号的最小正实际字段宽度。输入时 w 的指定值不应为零。

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