Python中的等号

时间:2013-09-18 17:44:56

标签: python

我在Python中编写了一个简单的更改计算器用于练习,但我遇到了一个问题。这是我的代码:

amounts = (100, 50, 20, 10, 5, 2, 1, 0.25, 0.10, 0.05, 0.01)
def get_change(full_amount): 
    final_change = []
    for amount in amounts:
        number = 0 
        while full_amount >= amount:
            if (full_amount < 0.50 and full_amount > 0.10 and amount == 0.25): break 
            number += 1
            full_amount -= amount
        final_change.append(number)
    return final_change

假设我输入2.40。它从2.40到0.40(一个toonie),然后它应该去,if (full_amount < 0.50 and full_amount > 0.10 and amount == 0.25): break它将跳过0.25并以四角钱结束。然而,实际上,它最终只有3角钱,一个镍,只有四个便士。当剩余金额等于被测量的金额时(剩余金额为0.10美分,金额为0.10美分 - 与镍金额相同),似乎会出现问题

2 个答案:

答案 0 :(得分:2)

这里的答案是你不应该将不可分割的值表示为浮点数。以美分代表一切。

解决方案的原因是浮点数不能精确地表示所有小数。因此,按不同金额划分不会做你想要的。相反,您需要划分积分金额,并适当地处理任何发生的余数。

一般来说,对浮点数进行等式检查也是危险的:你需要确定哪些差异“足够相等”并对其进行测试。

答案 1 :(得分:1)

将所有内容乘以100以除去小数。所以一毛钱应该是10美分,1美元100美分等等。由于浮点数不是数字的完美表示,因此你不应对它们进行任何相同的检查或双重检查。