Python以小数精度迭代列表

时间:2017-02-20 09:07:41

标签: python python-2.7 numpy pycharm

我使用netCDF Python库来读取netCDF变量,其中list(变量)返回正确的小数精度,如图像中所示(使用PyCharm IDE)。但是,当我尝试通过索引获取元素时,例如:variable [0],它返回舍入的值(例如:5449865.55794),而我需要5449865.55793999997。

enter image description here

如何以正确的小数精度迭代此列表?

一些基本代码

from netCDF4 import Dataset
nc_dataset = Dataset(self.get_file().get_filepath(), "r")
variable_name = "E" 
// netCDF file contains few variables (axis dimensions)
variable = nc_dataset.variables[variable_name]
variable is not a list but a netCDF object, however when using list() or variable[index] will return element value of the axis dimension.

2 个答案:

答案 0 :(得分:1)

你追逐的小数是假的。不同之处仅在于这些数字在屏幕上的显示方式,而不在于它们在您的计算机中的存储方式。

尝试以下方法来说服自己

a = 5449865.55793999997
a
# prints 5449865.55794

如果我们从字面上理解这两个数字之间的差异是3x10 ^ -11。 a大小的64位浮点变量可以解析的最小差异大于一个数量级。因此,您的计算机无法区分这两个十进制数字。

但看看光明的一面。您的数据不会受到某些神秘过程的破坏。

答案 1 :(得分:0)

希望这是适合您的需求:

import decimal

print decimal.Decimal('5449865.55793999997')