【问题标题】:Fortran: can you explain this formatting stringFortran:你能解释一下这个格式化字符串吗
【发布时间】:2014-03-12 11:29:08
【问题描述】:

我有一个需要修改的 Fortran 程序,所以我正在阅读它并试图理解它。您能否解释一下以下语句中的格式化字符串的含义:

write(*,'(1p,(5x,3(1x,g20.10)))') x(jr,1:ncols)

【问题讨论】:

    标签: formatting fortran fortran95


    【解决方案1】:

    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
    

    你得到:

      1p,g17.10  -> b1.2345678900E+11
    

    b 表示输出中的空白。请务必在字段宽度计数中为 - 留出空间...

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

      3p,g17.10  -> b123.45678900E+09  ! note only 8 digits after the decimal
    

    1p 为您购买了比默认值更高的精度,但您不再获得更多。负比例会降低您的精度,保留 10 位数字:

        -7p,g17.10  ->  b0.0000000123E+19
    

    我应该补充一点,p 比例因子编辑描述符在输入时完全不同。阅读文档...

    【讨论】:

    • 非常感谢您的广泛回答!
    【解决方案2】:

    我想稍微补充一下乔治的回答。不幸的是,这是 Fortran 的一个非常讨厌的 (IMO) 部分。通常,请记住,只要输入/输出列表中还有剩余值,就会自动重复 Fortran 格式规范,因此不必为每个要处理的值提供格式。

    比例因子

    在输出中,kP 之后的所有浮点值都乘以 10k。包含指数 (E) 的字段的指数减少了 k,除非通过使用 EN(工程)或 来固定指数格式ES(科学)描述符。缩放不适用于 G 编辑,除非 该值适用于 E 编辑。因此,(1P,G20.10)(1P,F20.10) 之间存在差异。

    分组

    n() 这样的格式在继续之前重复括号内的描述符 n 次。

    【讨论】:

    • 另外,我赞同 George 关于阅读文档的建议。 IBM 提供了有关此主题的大量信息。
    • 非常感谢您的精彩回答!
    • 现在ENES 可用,我不再使用G。 IMO,在此之前,修改E 很有用。 G 真的很危险;正如另一个答案中提到的,它的行为在输出和输入之间是不同的!
    • @M.S.B.我想你可以用打印输出所有格式描述符的房子贴上墙纸,更不用说openreadwrite 的所有参数...我喜欢 Fortran,但不是这部分:P
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多