我在 Pandas 的 read_csv 函数中遇到了一些浮点数问题。在我的调查中,我发现了这个:
In [15]: a = 5.9975
In [16]: a
Out[16]: 5.9975
In [17]: np.float64(a)
Out[17]: 5.9974999999999996
为什么Python内置的浮点数类型float
和np.float64
类型会给出不同的结果?我原以为它们都是C++的双精度浮点数。我在 Pandas 的 read_csv 函数中遇到了一些浮点数问题。在我的调查中,我发现了这个:
In [15]: a = 5.9975
In [16]: a
Out[16]: 5.9975
In [17]: np.float64(a)
Out[17]: 5.9974999999999996
为什么Python内置的浮点数类型float
和np.float64
类型会给出不同的结果?我原以为它们都是C++的双精度浮点数。>>> numpy.float64(5.9975).hex()
'0x1.7fd70a3d70a3dp+2'
>>> (5.9975).hex()
'0x1.7fd70a3d70a3dp+2'
它们是相同的数字,不同之处在于它们的表示方式。Python内置类型使用“正常”的表示方式,而NumPy类型使用准确的表示方式。
__repr__()
方法或其C级等效方法,是的。 - Ignacio Vazquez-Abrams5.9975
时得到的64位浮点数的精确十进制值。 - Mark Amery
read_csv
函数采用了其自己的超快速字符串转浮点数的方法,但这种方法 不 进行正确舍入。因此,在导出值并重新读取后,恢复的值可能与原始值相差 1 或 2 ulps。 - Mark Dickinsonread_excel
吗? - Gathide