首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Fortran90中打印real和real8变量的所有小数?

如何在Fortran90中打印real和real8变量的所有小数?
EN

Stack Overflow用户
提问于 2016-09-03 00:33:15
回答 2查看 3.2K关注 0票数 0
代码语言:javascript
运行
复制
program hello
   real(kind=8) :: x
   x=1.000001234567890
   Write(*,'(F10.11)') X
end program Hello

write语句到底是如何工作的?我试过几种组合,但都搞不明白。如果我不知道一个变量有多少个小数呢?我怎么才能把所有的数字打印到最后一个小数点呢?

EN

回答 2

Stack Overflow用户

发布于 2016-09-03 01:51:24

下面的程序将把浮点数打印到标准输出,而不会损失任何精度。

代码语言:javascript
运行
复制
program main

  use ISO_Fortran_env, only: &
       stdout => OUTPUT_UNIT, &
       compiler_version, &
       compiler_options

    ! Explicit typing only
    implicit none

    ! Variable declarations
    integer, parameter :: SP = selected_real_kind(p=6, r=37)
    integer, parameter :: DP = selected_real_kind(p=15, r=307) 
    real (SP)          :: single
    real (DP)          :: double

    single = 1.000001234567890_SP
    double = 1.000001234567890_DP

    write( stdout, '(e13.6e2)') single
    write( stdout, '(e23.15e3)') double

    write( stdout, '(/4a/)') &
    ' This file was compiled using ', compiler_version(), &
    ' using the options ', compiler_options()

end program main

请注意如何使用种类参数SPDP以可移植的方式控制精度。此程序产生以下结果:

代码语言:javascript
运行
复制
0.100000E+01
0.100000123456789E+001

This file was compiled using GCC version 6.1.1 20160802 using the options -mtune=generic -march=x86-64 -std=f2008ts
票数 2
EN

Stack Overflow用户

发布于 2016-09-03 18:05:44

你的主要问题是在'X.Y‘中,X是总长度,Y是小数点右边的长度。所以X> Y,在你的例子中是2...应该是"13.11“。

代码语言:javascript
运行
复制
PROGRAM Hello
IMPLICIT NONE
REAL(kind=8) :: x  !Some suggest DOUBLE
x=1.000001234567890
WRITE(*,5) x
5 FORMAT('x=',F14.11)
WRITE(*,6) x             !This make be better for you...
6 FORMAT('x=',0PE22.11)  !This make be better for you...
END PROGRAM Hello
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39297096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档