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

Python3 Tkinter鼠标滚轮增减0.1出现精度异常问题排查

问题原因分析

先看你提供的代码:

import tkinter as tk

def mouse_wheel(event):
    global count

    if event.delta == -120:
        count -= float(0.1)
    elif event.delta == 120:
        count += float(0.1)
    label["text"] = count

count = float(0)
root = tk.Tk()
root.title("turn mouse wheel")
root["bg"] = "darkgreen"

root.bind("<MouseWheel>", mouse_wheel)

label = tk.Label(root, font=("courier", 18, "bold"), width=10)
label.pack(padx=40, pady=40)

root.mainloop()

这个问题的核心是浮点数的二进制精度缺陷:

  • 十进制的0.1无法被二进制浮点数精确存储,它在二进制中是无限循环的小数,实际存储的是一个接近0.1的近似值。
  • 每次执行count += 0.1或count -= 0.1时,这个近似值的误差会不断累积。比如多次累加后,count的实际值可能变成0.30000000000000004或0.29999999999999993这类偏离预期的数值。
  • 当直接把带有精度误差的浮点数赋值给Label的text属性时,就会显示出多余的0或9,也就是你看到的异常情况。

你可以在Python环境里直接验证这个精度问题:

print(0.1 + 0.1 + 0.1)  # 输出不是0.3,而是0.30000000000000004

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:11