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

为何我的找零计算器代码输入小数(如0.03)时无响应?

找零计算器小数金额死循环问题排查与修复

问题根源

输入0.03这类小数时代码无响应,是因为浮点数精度误差导致的死循环。十进制小数(比如0.01)无法用二进制浮点数精确存储,当你反复执行Change -= 0.01时,实际数值会出现微小偏差(例如0.03减两次0.01后,会变成类似0.009999999999999995),永远达不到Change <= 0的终止条件,循环会一直运行下去。

解决方案

最可靠的修复方式是将金额转换为整数(以分为单位),彻底规避浮点数精度问题。另外原代码的循环索引也存在小问题,一并修正。

修改后的完整代码

# 将输入金额转换为整数分,用round处理精度问题
change = int(round(float(input('Change: ')) * 100))

hundreds, fifties, twenties, tens, fives, ones = 0, 0, 0, 0, 0, 0
quarters, dimes, nickels, pennies = 0, 0, 0, 0

while change > 0:
    if change >= 10000:  # 100元 = 10000分
        hundreds += 1
        change -= 10000
    elif change >= 5000:  # 50元 = 5000分
        fifties += 1
        change -= 5000
    elif change >= 2000:  # 20元 = 2000分
        twenties += 1
        change -= 2000
    elif change >= 1000:  # 10元 = 1000分
        tens += 1
        change -= 1000
    elif change >= 500:  # 5元 = 500分
        fives += 1
        change -= 500
    elif change >= 100:  # 1元 = 100分
        ones += 1
        change -= 100
    elif change >= 25:  # 25分
        quarters += 1
        change -= 25
    elif change >= 10:  # 10分
        dimes += 1
        change -= 10
    elif change >= 5:  # 5分
        nickels += 1
        change -= 5
    elif change >= 1:  # 1分
        pennies += 1
        change -= 1

currency_counts = [hundreds, fifties, twenties, tens, fives, ones, quarters, dimes, nickels, pennies]
currency_names = ['Hundreds: ', 'Fifties: ', 'Twenties: ', 'Tens: ', 'Fives: ', 'Ones: ', 'Quarters: ', 'Dimes: ', 'Nickels: ', 'Pennies: ']

print('')
# 用zip遍历名称和数量,避免索引错误
for name, count in zip(currency_names, currency_counts):
    if count > 0:
        print(f"{name}{count}")
print('')

其他可选方案(不推荐)

如果不想转换为整数,可以设置一个极小的阈值替代0作为终止条件,比如:

while True:
    if change <= 0.001:  # 当金额小于0.001元时,视为已找零完成
        break
    # 后续判断逻辑不变

但这种方法仍可能因浮点数误差出现异常,不如整数方案稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:05:41