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

为何用float而非int做减法会出现大量零?如何无需int函数输出一位小数?

解决Python浮点数减法精度问题:无需int函数保留小数的方法

你遇到的这个浮点数精度问题在Python里太常见了——毕竟二进制浮点数存储本身就会带来这类微小的误差。不用int函数的话,有好几种简单的方法能让print输出时只保留一位小数,我给你整理几个常用的:

  • 方法一:用格式化字符串直接控制输出
    这是最直接的方式,不用修改原始变量,只在打印的时候指定显示格式就行。不管原始浮点数藏着多少精度尾巴,输出时都会按你要的位数显示:

    a = 0.45
    b = 0.15
    c = a - b
    # 传统格式化写法
    print("{:.1f}".format(c))  # 输出 0.3
    # 更简洁的f-string(Python 3.6及以上支持)
    print(f"{c:.1f}")  # 同样输出 0.3
    

    这种方式只是改变了输出的呈现形式,变量c本身的实际值还是原来的浮点数,但完全满足你要的显示需求。

  • 方法二:用round()函数做四舍五入处理
    round()函数可以直接对浮点数进行四舍五入,指定保留1位小数后再打印:

    a = 0.45
    b = 0.15
    c = a - b
    print(round(c, 1))  # 输出 0.3
    

    这里round(c, 1)会把c四舍五入到一位小数,得到的结果显示出来就是你想要的0.3。需要提一句,round用的是“银行家舍入法”(四舍六入五成双),不过对于你这个场景来说完全够用。

  • 方法三:用decimal模块从根源避免精度问题
    如果你不仅是要显示正确,还需要精确的数值计算(比如金融场景),那可以用decimal模块,它用十进制存储数值,从根本上避免二进制浮点数的精度误差:

    from decimal import Decimal
    
    a = Decimal('0.45')
    b = Decimal('0.15')
    c = a - b
    print(c)  # 输出 0.30
    # 要是想只显示一位小数,同样可以用格式化
    print(f"{c:.1f}")  # 输出 0.3
    

    这个方法适合对精度要求高的场景,能彻底解决浮点数运算的精度问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:45:46