Python: 舍入到最接近的1/8%

2024-04-29 11:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python2.7中计算贷款的平均加权利率。在

我一开始用的是浮点数,这是有问题的。考虑到这些输入(贷款1万美元6.80%;贷款2万美元7.90%;贷款3万美元5.41%),正确结果为6.7275。使用十进制,我的代码输出它。在

但是,我应该取这个数字并将向上取整到最接近的1/8%,结果显示为6.75。当我使用格式四舍五入到两个地方时,我得到6.73。虽然这是我所期望的,但不符合此函数应该做的范围。在

from decimal import Decimal

def weightedAvgFixedArgs(r1,r2,r3,b1,b2,b3):
    rates = [Decimal(r1),Decimal(r2),Decimal(r3)]
    balances = [Decimal(b1),Decimal(b2),Decimal(b3)]

    a = Decimal(b1) * Decimal(r1)
    b = Decimal(b2) * Decimal(r2)
    c = Decimal(b3) * Decimal(r3)

    perLoanWghtFctr = a + b + c

    totalLoanAmt = sum(balances)

    intRate = (perLoanWghtFctr / totalLoanAmt) * 100

    return format(intRate, '.2f')

编辑:joachimisakson的建议提供了我请求的输出和我提供的输入。我没有在我的特定用例中对此进行过广泛的测试,但它正确地回答了我提出的问题。在

^{pr2}$

Tags: 代码b2b1b3decimalr2r3balances
3条回答

乘以8,取整或截断,然后除以8,下面是示例代码:

for i in range(0,10):
    v = i/10.0
    v = round(v*8) / 8.0
    print i/10.0, v

运行它你会得到:

^{pr2}$

四舍五入到最接近的1/8%:

import math

>>> math.ceil(.73 * 8) / 8
0.75

>>> math.ceil(.76 * 8) / 8
0.875

如果特别要求您将向上取整,则应该使用ceiling。在

import math

x = 6.7275
x = math.ceil(x * 8)/8  # x == 6.75

相关问题 更多 >