摆脱所有警告,即使是次要的警告是一个绝妙的主意——即使只是这样当你确实遇到更重要的问题时,你会看到它们,而不是让输出被小事淹没。
在这种情况下,警告信息相当清楚;您正在为整数分配双精度。内在截断,dint
但它不转换类型;所以你要分配一个双精度值,它的值被截断为整数。您可以正确地注意到内在函数的名称令人困惑,但是...
如果要进行转换以及截断,则idint
实际上转换为整数。
所以例如这个程序
program foo
integer :: nrev
double precision :: t_ref
t_ref = 1.
nrev = dint(t_ref)
end program foo
创建相同的警告:
$ gfortran -o foo foo.f90 -Wall -std=f95
foo.f90:8.11:
nrev = dint(t_ref)
1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1)
但是这个很好:
program foo
integer :: nrev
double precision :: t_ref
t_ref = 1.
nrev = idint(t_ref)
end program foo
如我们所见:
$ gfortran -o foo foo.f90 -Wall -std=f95
$