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

为何Jupyter与Python控制台的浮点值显示存在差异?

为什么Jupyter与Python控制台的浮点输出存在差异?

先还原你遇到的场景:
在Jupyter 4.3.1(Python 2.7.13)中执行这段代码:

import numpy as np
for i in np.arange(5, 6, 0.1):
    print(i)

得到的输出是:

5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997

但在Python原生控制台执行相同代码时,输出却是:

5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9

核心原因拆解

这本质是浮点数存储精度限制加上不同环境的显示规则差异导致的:

  • 首先,十进制的0.1无法用二进制浮点数精确表示——它是一个无限循环的二进制小数,所以np.arange生成序列时,每一步都是在前一个数的基础上累加这个不精确的0.1近似值,误差会逐步累积,导致后面的数值和你预期的十进制值存在微小偏差。

  • 两个环境的显示规则不同:

    • Python原生控制台(Python 2.7)在打印浮点数时,会自动采用「最短十进制表示」策略——它会找到能还原为原始二进制浮点数的最短十进制字符串,所以你看到的是整齐的5.2、5.3,而非实际存储的近似值。
    • Jupyter(或numpy的输出逻辑)则更偏向于展示浮点数的实际存储细节,用了更高精度的格式化方式,所以那些累积的微小误差就直接暴露了出来。

验证小技巧

你可以在两个环境中对同一个数值执行repr(i),比如取序列中那个显示为5.199999999999999的元素,会发现两个环境返回的repr结果完全一致——这说明两个环境中存储的浮点数本身是相同的,只是显示时的格式化逻辑不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:11