首页 > 解决方案 > 如何保持 Python 函数的精度?

问题描述

全部,

我正在研究一个简单的函数,它接受一个值并根据该值计算要分配的最小硬币数量。我一直使用 1.20 作为我的金额。因此,我应该拿回 6 个硬币 - 2 个硬币和 2 个硬币。为简单起见,我只显示代码的四分之一部分。当我在下面运行我的示例代码时,操作量 = 量 - 季度的精度在前两次迭代中是正确的,但是,到第三次,量变为 0.44999999999999996。

你知道为什么会发生这种情况以及我如何解决这个问题吗?我试过使用 decimal.Decimal 并改变精度。我不想只修复格式,而是想修复实际金额,因为这对于计算多少硬币至关重要。

#amount for testing
amount = 1.20

#coins
quarter = 0.25

def min_coins(amount):
    count_quarter = 0
    while amount >= quarter:
        amount = amount - quarter
        print(amount)
        count_quarter += 1

min_coins(amount)

标签: pythonpython-3.xloopsdecimalprecision

解决方案


正如John Gordon 所指出的,对于货币应用程序,您根本不想使用浮点数。要么使用该decimal.Decimal模块进行精确的小数计算,要么使用int便士而不是float美元来进行数学运算;如果 API 必须接受float美元,则在输入时转换值,并在返回时转换回来。对于您的代码,int便士方法如下所示:

#amount for testing
amount = 1.20

#coins
quarter = 25

def min_coins(amount):
    amount = round(amount * 100)  # Convert from float dollars to int pennies
    count_quarter = 0
    while amount >= quarter:
        amount -= quarter
        print(amount)  # Or print('{:.2f}'.format(amount / 100)) if necessary
        count_quarter += 1

min_coins(amount)

推荐阅读