Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在fortran 90中打印实数和实数8变量的所有小数?_Fortran_Fortran90 - Fatal编程技术网

如何在fortran 90中打印实数和实数8变量的所有小数?

如何在fortran 90中打印实数和实数8变量的所有小数?,fortran,fortran90,Fortran,Fortran90,write语句究竟是如何工作的?我试过几种组合,但都没办法。如果我不知道一个变量有多少个小数点呢?如何将所有数字打印到最后一个小数点?以下程序将浮点数打印到标准输出,而不会丢失任何精度 program hello real(kind=8) :: x x=1.000001234567890 Write(*,'(F10.11)') X end program Hello 注意如何使用种类参数SP和DP以便于携带的方式控制精度。该计划产生: program main use

write语句究竟是如何工作的?我试过几种组合,但都没办法。如果我不知道一个变量有多少个小数点呢?如何将所有数字打印到最后一个小数点?

以下程序将浮点数打印到标准输出,而不会丢失任何精度

program hello
   real(kind=8) :: x
   x=1.000001234567890
   Write(*,'(F10.11)') X
end program Hello
注意如何使用种类参数
SP
DP
以便于携带的方式控制精度。该计划产生:

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

以下程序将浮点数打印到标准输出,而不会丢失任何精度

program hello
   real(kind=8) :: x
   x=1.000001234567890
   Write(*,'(F10.11)') X
end program Hello
注意如何使用种类参数
SP
DP
以便于携带的方式控制精度。该计划产生:

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

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


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


您是否尝试过不指定格式?例如,使用
Write(*,*)X
,尽管这有点不雅观。你读过这本书吗?这可能是应该添加到文档中的内容。@d_1999我已经尝试过了,它给了我1.0000011920928955,我不理解
Real(kind=8)
很可能做了一些你认为不一样的事情。特别是,它没有指定8字节精度或双精度。这些值用二进制表示,因此请求“所有小数”(强制链接)是一个不适定的问题。最终,您要么接受列表导向(
*
)输出,要么使用格式规范来请求所需的位数。@agentp好的观点,我应该说“所有有效位数”。您是否尝试过不指定格式?例如,使用
Write(*,*)X
,尽管这有点不雅观。你读过这本书吗?这可能是应该添加到文档中的内容。@d_1999我已经尝试过了,它给了我1.0000011920928955,我不理解
Real(kind=8)
很可能做了一些你认为不一样的事情。特别是,它没有指定8字节精度或双精度。这些值用二进制表示,因此请求“所有小数”(强制链接)是一个不适定的问题。最终,您要么接受列表导向(
*
)输出,要么使用格式规范来请求所需的位数。@agentp好的观点,我应该说“所有有效位数”。谢谢,我将尝试这样做,尽管我很惊讶没有其他更简单的方法。有没有办法避免使用科学记数法?事实上,我不确定我是否可以使用这个实现,我正在调试一个包含许多变量的大块代码,并且我无法更改所有变量的声明。@user4050没有理由更改任何声明。也许jlokimmlin应该更明确地解释这个答案中最重要的部分是什么?谢谢,我会尝试一下,尽管我很惊讶没有其他更简单的方法。有没有办法避免使用科学记数法?事实上,我不确定我是否可以使用这个实现,我正在调试一个包含许多变量的大块代码,并且我无法更改所有变量的声明。@user4050没有理由更改任何声明。也许jlokimmlin应该更明确地解释这个答案中最重要的部分是什么?