如何在fortran 90中打印实数和实数8变量的所有小数?
write语句究竟是如何工作的?我试过几种组合,但都没办法。如果我不知道一个变量有多少个小数点呢?如何将所有数字打印到最后一个小数点?以下程序将浮点数打印到标准输出,而不会丢失任何精度如何在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
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应该更明确地解释这个答案中最重要的部分是什么?