Equal decimal numbers in Python
本问题已经有最佳答案,请猛点这里访问。
我用python编写了一个简单的变更计算器以供实践,我遇到了一个问题。以下是我的代码:
1 2 3 4 5 6 7 8 9 10 11 | 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(a toonie),然后它应该去,对
这里的答案是您不应该将不可分割的值表示为浮点数。用美分代表一切。
这就是解决方案的原因,因为浮点数不能精确地表示所有的小数。因此,按不同的数量进行划分并不能满足您的需要。相反,您需要分割整数,并适当地处理出现的任何余数。
一般来说,对浮点数的相等性检查也是危险的,因为这个原因:您需要决定什么差异"足够相等",并为此进行测试。
把所有的都乘以100,去掉小数。所以一角钱应该是十美分,一美元一百美分等等。因为浮点数不是数字的完美表示,所以不应该对它们或双精度数做任何相等的检查。