python划分结果不正确,结果不同



我正在尝试解决分数背包问题。

我必须找到每重量热量最高的食物。我会用最大的卡路里把我的包装满规定/限定的重量。

虽然算法是真的,但由于python划分的怪异,我找不到真实的结果

当我试图找到每重量热量最高的物品时(蟒蛇3)

print ((calories_list[i]/weight_list[i])*10)
# calories[i] 500 and weight[i] 30 (they're integers)
166.66666666666669

另一方面,我打开终端,输入python3

>>> 500/30
16.666666666666668
#when multiply with 10, it must be 16.666666666666668 not
#166.66666666666669

正如你所看到的,它给出了不同的结果

最重要的是,真正的答案是

500/30=16.6666666667

我两天前在这里被卡住了,请帮帮我

感谢

如Python常见问题解答:中所述

CPython中的浮点类型使用C双精度进行存储。浮点对象的值存储在具有固定精度(通常为53位)的二进制浮点中,Python使用C运算来执行浮点运算,而C运算又依赖于处理器中的硬件实现。这意味着,就浮点运算而言,Python的行为与包括C和Java在内的许多流行语言类似。

您可以使用decimal模块作为替代方案:

>>> from decimal import Decimal
>>> Decimal(500)/Decimal(30)
Decimal('16.66666666666666666666666667')

最新更新