有没有人能给我解释一下,为什么这个精确的数字舍入后,麻木圆表现得很奇怪:

df = pd.DataFrame({'c': [121921117.714999988675115, 445, 22]})
df = np.round(df['c'], 8)

Result:
121921117.71499997
445.0
22.0

Expected:
121921117.71499999
445.0
22.0

很明显,第一个数字不是很四舍五入,你有什么 idea 吗?

编辑: 因为我在这里关注的是精度,而不是性能,所以我使用了python轮函数来解决这个问题:

df.applymap(round, ndigits=8)

推荐答案

判断round(又名around)文档中的小字体2. 简短的答案是,round"使用一种快速但有时不准确的算法",如果你想看的话,可以使用format_float_positional 正确的结果.

enter image description here

>>> import pandas as pd
>>> df = pd.DataFrame({'c': [121921117.714999988675115, 445, 22]})
>>> df["c"][0]
121921117.71499999
>>> round(df["c"][0],8)
121921117.71499997
>>> np.format_float_positional(df["c"][0],8)
'121921117.71499999'

Python相关问答推荐

如何修复使用turtle和tkinter制作的绘画应用程序的撤销功能

如何自动抓取以下CSV

比较两个数据帧并并排附加结果(获取性能警告)

DataFrame groupby函数从列返回数组而不是值

从收件箱中的列中删除html格式

沿着数组中的轴计算真实条目

使用索引列表列表对列进行切片并获取行方向的向量长度

删除所有列值,但判断是否存在任何二元组

avxspan与pandas period_range

如何从pandas的rame类继承并使用filepath实例化

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

Python列表不会在条件while循环中正确随机化'

Polars asof在下一个可用日期加入

如何使用两个关键函数来排序一个多索引框架?

Polars将相同的自定义函数应用于组中的多个列,

在pandas/python中计数嵌套类别

在电影中向西北方向对齐""

如何将返回引用的函数与pybind11绑定?

用0填充没有覆盖范围的垃圾箱

无法在盐流道中获得柱子