Fortran:你能解释一下这个格式化字符串吗?

pio*_*kuc 2 formatting fortran fortran95

我有一个Fortran程序,我需要修改,所以我正在读它并试图理解.你可以解释一下以下语句中的格式化字符串是什么意思:

write(*,'(1p,(5x,3(1x,g20.10)))') x(jr,1:ncols)
Run Code Online (Sandbox Code Playgroud)

age*_*ntp 5

http://www.fortran.com/F77_std/rjcnf0001-sh-13.html

简而言之,您每行写三个通用(g)格式浮点数.每个浮点数的总字段宽度为20个字符,小数点右侧有10个位置.大幅度数字呈指数形式.

所述1xs的简单相加的空间(这可能也已通过增加场宽度即完成,g21.10因为数字是右对齐.将5x在每一行的开头提出额外的5位.

这里有点棘手的事情是导致1p这是一个比例因素.它使得由以下g格式产生的所有指数形式数的尾数乘以10,并且指数相应地改变,即代替默认值,

    g17.10  ->  b0.1234567890E+12
Run Code Online (Sandbox Code Playgroud)

你得到:

  1p,g17.10  -> b1.2345678900E+11
Run Code Online (Sandbox Code Playgroud)

b表示输出中的空白.一定要留出空间用于-场地宽度计数......

为了在比例大于1的情况下完整性,小数位数减少(保持总精度),即,

  3p,g17.10  -> b123.45678900E+09  ! note only 8 digits after the decimal
Run Code Online (Sandbox Code Playgroud)

这比1p你在默认情况下的精度要高,但你不再得到它.负标度会使您精确,保留10位数:

    -7p,g17.10  ->  b0.0000000123E+19
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,p比例因子编辑描述符在输入上做了完全不同的事情.阅读文档......