我的长期目标是在ruby程序中复制this spreadsheet,然后复制到rails应用程序。
目前,我试图确定两笔债务中哪一方的利息最高,然后减去该债务的最低金额以及该人愿意支付的任何额外金额以及从另一方减去最低金额。债务。
示例:
card = balance: $10,000, Minimum: $200, i% = 20%
loan = balance: $40,000, Minimum: $400, i% = 5%
payments made per month = $1000
在这种情况下,该程序每个月首先从卡上花费600美元(1000美元 - (200美元+ 400美元)+ 200美元),直到它的余额为0然后花1000美元(1000美元 - 400美元+ 400美元),直到贷款还清并返回需要多少个月。
目前,我试图在每个月减去金额以考虑债务余额,并在调用该方法时进行此更新 - 但这似乎不起作用,两笔债务将保持400美元(snowball_amount方法)。 编辑:修复了丢失的方法问题。需要将attr_reader更改为attr_accessor 同样由于某种原因,当我将一个债务对象传递给highest_interest时,我得到一个未定义的方法'balance ='错误。将不胜感激为此提供一些帮助!
创建债务类
class Debt
def initialize(balance: b, monthly_payment: m, annual_interest_rate: a)
@balance = balance
@monthly_min = monthly_payment
@int_rate = annual_interest_rate
end
attr_reader :monthly_min, :balance, :int_rate
end
创建两个债务对象
@debt1 = Debt.new(balance: 14000.0, monthly_payment: 200.0, annual_interest_rate: 0.06)
@debt2 = Debt.new(balance: 40000.0, monthly_payment: 400.0, annual_interest_rate: 0.08)
将它们放入数组
@debts_array = [@debt1, @debt2]
设定每个人愿意支付的金额
@payment = 1000.0
确定支付多少额外费用,即@payment-每个债务每月最低债务,只有当债务余额超过0时
def snowball_amount
@payments_less_mins = @payment
@debts_array.each do |debt|
if debt.balance <= 0
@payments_less_mins
elsif debt.balance > 0
@payments_less_mins = @payments_less_mins - debt.monthly_min
end
end
puts @payments_less_mins
return @payments_less_mins
end
计算该月债务余额的方法
def compounding_interest(balance, apr)
return balance * (1 + apr/12)**1
end
确定偿还债务需要多长时间。当债务余额高于0时,首先根据利息增加更新余额,然后从债务余额中减去最低月付款和余额中的雪球(额外金额)。然后将债务余额设为0
def highest_interest(debt, snowball)
months_to_pay = 0
while debt.balance > 0
debt.balance = compounding_interest(debt.balance, debt.int_rate)
debt.balance = debt.balance - (debt.monthly_min + snowball)
months_to_pay += 1
end
debt.balance = 0
snowball_amount
puts months_to_pay
end
确定哪些债务具有最高余额,然后对该债务采取最高利率法。
def which_has_higher_interest
debts_array = @debts_array.sort{|i| i.int_rate}.reverse!
puts debts_array[0].balance
debts_array.each do |debt|
highest_interest(debt, snowball_amount)
end
end
调用which_has_higher_interest方法
puts which_has_higher_interest
答案 0 :(得分:1)
在highest_interest
方法的第3行,第4行和第7行中,您在balance=
对象上调用了一个名为Debt
的方法,但您的Debt
个对象没有有这样的方法。您需要以某种方式定义它,可能通过更改行
attr_reader :monthly_min, :balance, :int_rate
到
attr_reader :monthly_min, :int_rate
attr_accessor :balance