【问题标题】:Loan payment calculation贷款支付计算
【发布时间】:2016-02-14 02:22:49
【问题描述】:

我正在学习 Python 并且卡住了。我正在尝试查找贷款支付金额。我目前有:

def myMonthlyPayment(Principal, annual_r, n):
    years = n
    r = ( annual_r / 100 ) / 12
    MonthlyPayment = (Principal * (r * ( 1 + r ) ** years / (( 1 + r ) ** (years - 1))))
    return MonthlyPayment

n=(input('Please enter number of years of loan'))
annual_r=(input('Please enter the interest rate'))
Principal=(input('Please enter the amount of loan'))

但是,当我跑步时,我跑了一点点。如果有人能指出我的错误,那就太好了。我正在使用 Python 3.4。

【问题讨论】:

标签: python python-3.x finance


【解决方案1】:

付款计算方面,您似乎没有正确翻译formula。除此之外,由于内置的​​input() 函数返回字符串,因此在将值传递给期望它们为数值的函数之前,您需要将它返回的任何内容转换为正确的类型。

def myMonthlyPayment(Principal, annual_r, years):
    n = years * 12  # number of monthly payments
    r = (annual_r / 100) / 12  # decimal monthly interest rate from APR
    MonthlyPayment = (r * Principal * ((1+r) ** n)) / (((1+r) ** n) - 1)
    return MonthlyPayment

years = int(input('Please enter number of years of loan: '))
annual_r = float(input('Please enter the annual interest rate: '))
Principal = int(input('Please enter the amount of loan: '))

print('Monthly payment: {}'.format(myMonthlyPayment(Principal, annual_r, years)))

【讨论】:

【解决方案2】:

我认为在你计算的最后一点,

/ (( 1 + r ) ** (years - 1))

你的括号错误;应该是

/ ((( 1 + r ) ** years) - 1)

【讨论】:

  • 不幸的是,这使得计算更加偏离。还有什么想法吗?它的值大约为 2。我几乎觉得存在某种类型的舍入误差。
  • @S-Mason:你能给出一个样本:p、r、n 和预期输出吗?
  • 30年,20%利息,10000本金收益率:169.444444444应该是167.101868625
【解决方案3】:

我认为正确的公式是这样的,

MonthlyPayment = (Principal * r) / (1 - (1 + r) ** (12 * years))

我清理了你的一些变量,

def get_monthly_payment(principal, annual_rate, years):
    monthly_rate = annual_rate / 100 / 12
    monthly_payment = principal * (monthly_rate + monthly_rate / ((1 + monthly_rate) ** (12 * years) - 1))
    return monthly_payment

years = float((input('Please enter number of years of loan')))
annual_rate = float((input('Please enter the interest rate')))
principal = float((input('Please enter the amount of loan')))
print ("Monthly Payment: " + str(get_monthly_payment(principal, annual_rate, years)))

在输入周围添加一个 try-except 块也是谨慎的做法。

【讨论】:

  • 如果r > 0 然后(1 + r) ** (12 * years) > 1 所以(1 - (1 + r) ** (12 * years)) 给出否定结果。 负付款意味着你的公式是错误的。
  • 是的,休。谢谢你抓住那个。我从 WikiHow 复制了那个公式,我很肯定我完全按照他们的方式编码,但这是错误的。我根据我希望是正确的公式更正了上面的回答。我仍然不喜欢用 r 来指定月利率或用 n 来表示月数,因为只有写它的人才能理解,甚至 3 个月后他也不记得自己的变量定义了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
相关资源
最近更新 更多