我正在一個客戶的網站上工作,我正在寫一個攤鋪計劃計算器在軌道上的紅寶石。對於較長的貸款期限計算,它似乎並沒有被打破,當餘額達到0Ruby/Rails while循環不正確?
這裏是我的代碼:
def calculate_amortization_results
p = params[:price].to_i
i = params[:rate].to_d
l = params[:term].to_i
j = i/(12*100)
n = l * 12
m = p * (j/(1 - (1 + j) ** (-1 * n)))
@loanAmount = p
@rateAmount = i
@monthlyAmount = m
@amort = []
@interestAmount = 0
while p > 0
line = Hash.new
h = p*j
c = m-h
p = p-c
line["interest"] = h
line["principal"] = c
if p <= 0
line["balance"] = 0
else
line["balance"] = p
end
line["payment"] = h+c
@amort.push(line)
@interestAmount += h
end
end
這裏是視圖:
- @amort.each_with_index do |a, i|
%li
.m
= i+1
.i
= number_to_currency(a["interest"], :unit => "$")
.p
= number_to_currency(a["principal"], :unit => "$")
.pp
= number_to_currency(a["payment"], :unit => "$")
.b
= number_to_currency(a["balance"], :unit => "$")
我我看到的是,代替最終付款餘額0.00美元,它顯示「 - $ - inf」,迭代一個循環,然後顯示$ 0.00,但顯示「 - $ - inf」感興趣。它應該循環,直到p變爲0,然後停止並將餘額設置爲0,但不是。任何想法我做錯了什麼?
該計算器是here。對於較短的條件(如5年)似乎工作正常,但較長的條款導致上述錯誤。
編輯:
更改while循環n.times do
,然後改變平衡以
= number_to_currency(a["balance"], :unit => "$", :negative_format => "$0.00")
是一個解決辦法,但我想知道爲什麼while循環止跌不能正常工作
to_d是BigDecimal,但使用浮動工作,謝謝。 – aperture
不錯的看點:+1 :) – apneadiving
謝謝,apneadiving :) – Tilo