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

输入小数时Python程序判断错误:相等数值为何提示Incorrect?

问题原因与解决方案

问题根源

这是浮点数二进制存储的精度限制导致的。计算机用二进制存储浮点数,但像0.1这样的十进制小数,在二进制中是无限循环的小数,无法被精确表示,只能存储一个近似值。当计算3 * 0.1时,得到的结果并不是精确的0.3,而是一个非常接近0.3的近似值(比如0.30000000000000004);而你输入的0.3转成浮点数后,是另一个近似值,二者在底层存储的二进制数值并不完全一致,所以直接用==比较会返回False,程序输出“Incorrect”。

你可以在Python交互环境中验证这一点:

>>> 3 * 0.1
0.30000000000000004
>>> 3 * 0.1 == 0.3
False

解决方案

有三种常见的解决方式:

1. 对数值进行四舍五入后比较

通过round()函数将两个数保留相同的小数位数后再比较,比如保留10位小数:

number1 = float(input("Enter the first number: "))
number2 = float(input("Enter the second number: "))

correct_answer = number1 * number2

answer = float(input(f"Enter {number1} * {number2} = "))

# 保留10位小数后比较
if round(correct_answer, 10) == round(answer, 10):
    print("Correct")
else:
    print("Incorrect")

print(f"It was {answer}")

2. 使用math.isclose()函数判断近似相等

Python的math模块提供了isclose()函数,可以判断两个浮点数是否在指定的误差范围内相等,默认的误差范围已经足够处理绝大多数日常场景:

import math

number1 = float(input("Enter the first number: "))
number2 = float(input("Enter the second number: "))

correct_answer = number1 * number2

answer = float(input(f"Enter {number1} * {number2} = "))

if math.isclose(correct_answer, answer):
    print("Correct")
else:
    print("Incorrect")

print(f"It was {answer}")

3. 使用decimal模块进行精确计算

如果需要更高精度的十进制计算,可以使用Python标准库中的decimal模块,它支持精确的十进制算术:

from decimal import Decimal, getcontext

# 设置精度,可根据需求调整
getcontext().prec = 10

number1 = Decimal(input("Enter the first number: "))
number2 = Decimal(input("Enter the second number: "))

correct_answer = number1 * number2

answer = Decimal(input(f"Enter {number1} * {number2} = "))

if correct_answer == answer:
    print("Correct")
else:
    print("Incorrect")

print(f"It was {answer}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:53:27