【发布时间】:2016-03-24 21:41:11
【问题描述】:
我正在尝试计算 Python 2.7 中贷款的平均加权利率。
我从花车开始,这是有问题的。给定这些输入(Loan #1 $20,000 6.80%;Loan #2 $10,000 7.90%;Loan #3 $10,000 5.41%),正确的结果是 6.7275。使用十进制,我的代码输出。
但是,我应该取那个数字并将 up 舍入到最接近的 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')
编辑:Joachim Isaksson 的建议提供了我要求的输出和我提供的输入。我没有在我的特定用例中对此进行广泛测试,但它正确回答了我提出的问题。
# return format(intRate, '.2f')
z = intRate * 8
y = format(z, '.0f')
x = Decimal(y) / Decimal(8)
return x
【问题讨论】:
-
乘以8,四舍五入,除以8?
-
我确定您的意思是最近的
1/4,对吧? -
@pp_ 我被明确告知“下一个最接近的 1/8%”,但问我这个的人可能犯了一个错误。
-
您的代码为所提供的输入返回
672.75? -
@PadraicCunningham (0.0680,0.0790,0.0541,20000,10000,10000) 的单元测试返回 6.73。但是,是的,如果我包含更多的地方,它将转到 6.7275。
标签: python math decimal rounding average