为何用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
相关产品推荐
相关产品推荐

