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

为何少量位数的小数能被正确打印?IEEE 754及Python实现解析

问题解答

先看Python里的典型现象:

>>> 0.1 + 0.2
0.30000000000000004

或是:

>>> 0.10000000000000001
0.1

这种现象是IEEE 754标准特性与Python的浮点数显示机制共同作用的结果,具体拆解如下:

1. IEEE 754的存储本质

计算机用有限长度的二进制位存储浮点数,大部分十进制小数(比如0.1、0.2)无法被二进制浮点数精确表示,实际存储的是它们的近似值。以0.1为例,它的二进制表示是无限循环的,只能被截断到IEEE 754双精度浮点数的位数,所以存储的实际值和字面意义上的0.1存在微小偏差。

2. Python的浮点数显示逻辑

Python在打印浮点数时,不会直接输出存储的精确二进制转换结果,而是遵循一个规则:寻找最短的十进制字符串,当这个字符串被转换回IEEE 754浮点数时,能完全还原到原来的存储值。

  • 对于0.1、0.2这类短十进制小数,虽然存储的是近似值,但存在一个最短的十进制字符串(就是它们本身),转换后能对应到存储的近似值,所以打印时直接显示这个短字符串。
  • 而0.10000000000000001这个字面量,当转换为IEEE 754浮点数时,和0.1的存储值完全一致,所以Python会显示更短的0.1。
  • 至于0.1 + 0.2的结果,它的存储值无法用一个短十进制字符串来还原,所以Python只能输出最接近的精确十进制表示,也就是0.30000000000000004。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:39