Fortran Coder

查看: 9816|回复: 5
打印 上一主题 下一主题

[输入输出] 等宽度输出数据

[复制链接]

66

帖子

16

主题

0

精华

专家

F 币
452 元
贡献
271 点
跳转到指定楼层
楼主
发表于 2017-3-9 13:36:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
fortran 有没有这样的功能,自动识别数据,并且等宽度输出
比如:123.6,34.98,1456,889.4.。。。。。等好多数据
输出结果是是这样,比如规定7个字节的宽度
123.600
34.9800
1456.00
889.400
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2017-3-9 17:40:15 | 只看该作者
假如你限定宽度为7,怎么输出 123456.789 ?

66

帖子

16

主题

0

精华

专家

F 币
452 元
贡献
271 点
板凳
 楼主| 发表于 2017-3-10 08:37:33 | 只看该作者
li913 发表于 2017-3-9 17:40
假如你限定宽度为7,怎么输出 123456.789 ?

这个的前提是我是知道数据小数点前面数据的位宽的,因为组态软件读入数据不太智能,所以要统一位宽的

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2017-3-10 12:27:50 | 只看该作者
没有直接的办法,只能自行判断,分情况使用格式符。

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
5#
发表于 2017-3-10 12:39:00 | 只看该作者
[Fortran] 纯文本查看 复制代码
program test
  implicit none 
  integer::n=7,m,i
  character(40):: str='',strF="(f20.20)"
  real a,b
  !设置输出格式
  write(strF(3:4),'(i2.2)') n*2+1
  write(strF(6:7),'(i2.2)') n
  !输出到字符串
  a= 1234567
  write(str,strf) a
  str=adjustl(str)
  !验证
  if(str(1:1)=='*') then
    write(*,*) '输出域宽不够'
  else   
    read(str(1:n),*) b
    str(n+1:) = ''
    if(abs(a-b)>1.0) then
      write(*,*) '输出域宽不够'
    else
      write(*,"(a)") str(1:n)
    end if
  end if  
  pause
  end program

评分

参与人数 1贡献 +9 收起 理由
vvt + 9

查看全部评分

66

帖子

16

主题

0

精华

专家

F 币
452 元
贡献
271 点
6#
 楼主| 发表于 2017-3-10 13:12:31 | 只看该作者
li913 发表于 2017-3-10 12:39
[mw_shl_code=fortran,true]program test
  implicit none
  integer::n=7,m,i

不错  可以采用字符串来搞定 好办法
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-24 00:25

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表