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

为何df.astype('int')转换pandas浮点数时数值会异常变化?

为什么57.99999999999999转int后是57而非58?

这个现象本质是浮点数二进制存储的精度限制加上pandas截断式转换逻辑共同导致的:

1. 浮点数的二进制存储局限

计算机无法精确表示所有十进制小数,因为浮点数采用二进制编码。你输入的57.99999999999999和57.999999999999996,在二进制存储中实际是略小于58的数值——它们的十进制写法只是近似,真实存储值并没有达到58。

而57.999999999999997刚好突破了这个精度阈值,被二进制浮点数编码为精确等于58的数值。

你可以用Python原生float验证:

>>> 57.99999999999999 < 58
True
>>> 57.999999999999997 == 58
True

2. pandas astype('int')的转换逻辑

pandas的astype('int')采用截断式转换:直接丢弃小数部分,只保留整数位,完全不做四舍五入。

所以:

  • 当存储值略小于58时,截断小数后得到57
  • 当存储值等于58时,截断后自然得到58

这就是为什么同样看似接近58的数值,转换结果却不同。

内容的提问来源于stack exchange,提问作者David Siret Marqués

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:12:40