FlagArchitect 发表于 2019-8-21 17:31:25

FORTRAN77 输出后数值发生变化

      WRITE(6,38)K1,AK1,K21,AK21,K31,AK31,K01,AK01                      00007890
   38 FORMAT(1H ,' K1=',1PE10.3,2X,F7.3,5X,'K21=',1PE10.3,2X,         00007900
   1F7.3,5X,'K31=',1PE10.3,2X,F7.3,5X,'K01=',1PE10.3,2X,            00007910
   2F7.3/)

这段代码中变量AK1,AK21,AK31,AK01用浮点数输出后数值是用科学计数法输出的10倍,结果如图。
是什么导致了这个现象呢?求各位大佬解答。


li913 发表于 2019-8-21 21:34:26

1、给出用两种形式输出的结果 and 代码.
2、看看P编辑符。
3、我试了,没有你说的情况。

FlagArchitect 发表于 2019-8-22 14:21:13

li913 发表于 2019-8-21 21:34
1、给出用两种形式输出的结果 and 代码.
2、看看P编辑符。
3、我试了,没有你说的情况。


我重新截了下图,上面那一段是原来的代码,后面两个write是我加的。
我如果把原来代码里的F7.3改成1PE10.3,结果就是对的。但是用Fx.x,就是原来的十倍。

FlagArchitect 发表于 2019-8-22 14:23:22

FlagArchitect 发表于 2019-8-22 14:21
我重新截了下图,上面那一段是原来的代码,后面两个write是我加的。
我如果把原来代码里的F7.3改成1PE10. ...

会不会是编译器的问题呢,我用的simply fortran,学校这破电脑的VS死活装不上intel的编译器

li913 发表于 2019-8-23 15:37:54

本帖最后由 li913 于 2019-8-23 20:54 编辑

如果你认真看看P编辑符的说明就明白了。1、输出时,P遇到E,输出值不变,但输出样式会变(比如1p结果: 1.0e1 变为 0.1e2);
2、P遇到f,输出值改变(1p结果: 10.0 变为 100.0);
3、同一行输出两个或多个数据,如果第一个格式出现P, 后续的输出默认继承前一个P的效果;
4、可用0P取消该继承效果。"(1Pe12.3,e12.3)" 两个都具有P效果;"(1Pe12.3,0Pe12.3,f12.3)"仅第一个具有P效果。

FlagArchitect 发表于 2019-8-27 14:22:15

li913 发表于 2019-8-23 15:37
如果你认真看看P编辑符的说明就明白了。1、输出时,P遇到E,输出值不变,但输出样式会变(比如1p结果: 1.0e1 ...

明白了,感谢大佬指点!
页: [1]
查看完整版本: FORTRAN77 输出后数值发生变化