You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas小数四舍五入失效求助:结果与预期不符

为啥Pandas 0.20.3里round(9)给出的结果和你预期不一样?

嘿,这个问题我之前也碰到过,核心原因其实是二进制浮点数的精度限制在搞鬼!你输入的0.0094909865这个十进制小数,根本没法在二进制浮点数系统里精确存储,实际存在内存里的是一个比它略小的值,这直接导致了四舍五入时的偏差。

具体来说是怎么回事?

计算机默认用float64(双精度浮点数)存小数,但很多十进制小数转成二进制后是无限循环的,只能存近似值。比如你输入的0.0094909865,实际存的是这个:

print(repr(0.0094909865))
# 输出:0.009490986499999999

看到没?这个值其实是0.009490986499999999,比你想要的0.0094909865小了一丢丢。当你调用round(9)时,是对这个近似值做四舍五入:第9位小数是6,后面跟着的是499...,不够触发进位的条件,结果自然就变成了0.009490986,而不是你预期的0.009490987。

不信的话你自己测测

不用Pandas,直接在Python里测单个浮点数的四舍五入,结果一模一样:

print(round(0.0094909865, 9))
# 输出:0.009490986

这说明问题不是Pandas的锅,是底层浮点数表示的固有特性,而0.20.3版本的Pandas直接用了这个底层逻辑。

那怎么得到你想要的结果?

如果需要精确的十进制四舍五入,得用Python的decimal模块,它专门处理精确的十进制运算:

from decimal import Decimal, ROUND_HALF_UP

num = Decimal('0.0094909865')
rounded_num = num.quantize(Decimal('0.000000001'), rounding=ROUND_HALF_UP)
print(rounded_num)
# 输出:0.009490987

在Pandas里,你也可以把数据转成Decimal类型再做四舍五入,就能避开浮点数的精度坑了。

内容的提问来源于stack exchange,提问作者Gayathri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:27:54