我有一个需要修改的Fortran程序,所以我正在阅读它并尝试理解。您能否解释一下以下语句中的格式化字符串的含义:
write(*,'(1p,(5x,3(1x,g20.10)))') x(jr,1:ncols)
答案 0 :(得分:5)
http://www.fortran.com/F77_std/rjcnf0001-sh-13.html
很简单,你每行写三个通用(g)格式浮点数。每个浮点数的总字段宽度为20个字符,小数点右侧有10个位置。大幅度数字呈指数形式。 1x
只是添加空格(也可以通过增加字段宽度来完成,即g21.10
,因为数字是右对齐的。5x
增加了一个空格每行开头有5个空格。
这里有点棘手的事情是导致1p
这是一个比例因素。它使得由以下g
格式生成的所有指数形式数的尾数乘以10,并且指数相应地改变,即取代默认值,
g17.10 -> b0.1234567890E+12
你得到:
1p,g17.10 -> b1.2345678900E+11
b
表示输出中的空白。请务必为字段宽度计数-
留出空间......
为了在比例大于1的情况下完整性,小数位数减少(保持总精度),即
3p,g17.10 -> b123.45678900E+09 ! note only 8 digits after the decimal
这是1p
比默认值更精确的数字,但你不再获得。负标度会降低您的精确度,保留10位数字:
-7p,g17.10 -> b0.0000000123E+19
我应该补充一点,p
比例因子编辑描述符在输入时执行完全不同的。阅读文档...
答案 1 :(得分:2)
我想稍微补充乔治的答案。不幸的是,这是Fortran非常讨厌(IMO)的一部分。通常,请记住,只要输入/输出列表中仍有值,就会自动重复Fortran格式规范,因此不必为每个要处理的值提供格式。
在输出中, k P 之后的所有浮点值都乘以10 k 。包含指数( E )的字段的指数减去 k ,除非使用 EN (工程)或修复指数格式ES (科学)描述符。缩放不适用于 G 编辑,除非值应用 E 编辑。因此,(1P,G20.10)
和(1P,F20.10)
之间存在差异。
像 n ()这样的格式在继续之前重复括号 n 中的描述符。