【发布时间】:2016-12-29 19:36:47
【问题描述】:
在fortran中,我必须将纬度和经度四舍五入到小数点后一位。
我正在使用 gfortran 编译器和 nint 函数,但以下不起作用:
print *, nint( 1.40 * 10. ) / 10. ! prints 1.39999998
print *, nint( 1.49 * 10. ) / 10. ! prints 1.50000000
在这里寻找通用和特定的解决方案。例如:
-
我们如何显示四舍五入到小数点后一位的数字?
-
我们如何在 fortran 中存储这些四舍五入的数字。在浮点变量中是不可能的,但是还有其他方法吗?
-
我们如何将这些数字写入 NetCDF?
-
我们如何将这些数字写入 CSV 或文本文件?
【问题讨论】:
-
真正简短的回答是你不能这样做。浮点表示是不精确的,并且不能保证浮点除以十(或四舍五入到小数点后一位)在您使用的任何大小的浮点类型下都有精确的表示。这仅用于打印或显示吗?
-
@talonmies - 不,它没有打印或显示。我有一个输入 netcdf 文件,小数点后只有一位。我已经修改了经度,我想把它写回 netcdf 文件。
-
好吧,你不能用浮点数做到这一点。您将需要使用定点或小数类型
-
@talonmies - 你能举个例子并添加它作为答案吗?我很乐意投票并接受
-
NetCDF 浮点数与 Fortran REAL 相同。
标签: fortran rounding gfortran netcdf