在 python 中将浮点数列四舍五入到小数点后 2 位 [duplicate]

Rounding a float column to 2 decimal places in python [duplicate]

提问人:Tanjil 提问时间:10/8/2023 最后编辑:Tanjil 更新时间:10/9/2023 访问量:106

问:

这个问题在这里已经有答案了:
浮点数学坏了吗? (34 个答案)
上个月关闭。

此帖子在上个月经过编辑并提交审核,但未能重新打开该帖子:

原始关闭原因未解决

我正在使用 databricks,并尝试将 pandas 数据帧列舍入到 2 dp。使用 S/O [1] 和 [2] 上的现有帖子,我尝试了以下代码:

#=========== Solution 1 ==============#

df['value'] = round(df['value'], 2)

#=========== Solution 2 ==============#

def round_and_format(x):
  from decimal import Decimal, ROUND_UP
  return float(Decimal(str(x)).quantize(Decimal('0.01'), rounding=ROUND_UP))

df['value'] = df['value'].apply(round_and_format)

#=========== Solution 3 ==============#

df['value'] = (df['value']*100).astype(int)/100

不幸的是,在查看 SQL DB 时,上述代码无法正常工作。例如,0.916147589683533 四舍五入为 0.920000016689301。预期值应为 0.92

我的问题是:

  • 我在这里犯了一个明显的错误吗?
  • 有人还有其他建议吗?

先谢谢你。

Python pandas 舍入

评论

0赞 wjandrea 10/8/2023
我已经将问题作为副本关闭了,尽管目前尚不清楚您是只想显示四舍五入的值还是实际保留它们,因此我添加了一堆链接来涵盖所有基础。另请注意,有些问题是关于普通 Python 的,它只有一种浮点类型,而 Pandas 有几种,而您似乎使用的是 32 位。
0赞 Tanjil 10/9/2023
嗨,我已经更新了帖子并提供了更多详细信息。
0赞 wjandrea 10/9/2023
对不起,你还在为什么感到困惑?你读过我链接的所有内容吗?没有冒犯,但看起来你只是浏览了代码,没有阅读任何解释。您看到的结果是由浮点舍入误差引起的。.如何处理这取决于你要完成什么。np.float32(0.920000016689301) == np.float32(0.92)
0赞 Tanjil 10/9/2023
还行。在这种情况下,如果我想返回 0.92,应该如何处理 np.float(0.92)?
0赞 wjandrea 10/9/2023
你是什么意思?

答: 暂无答案