[英]How to perform loan equations in Java?
我正在嘗試制作一個程序,允許用戶在考慮貸款時確定不同的方面。 第一個公式應該確定給定的每月還款額,貸款額,利率和月數。 第二個方程式是在給定貸款金額,利率和每月還款額的情況下,確定要償還多少筆(或幾個月)。 這是我正在測試的代碼,但似乎無法獲得有效的輸出。
float amount = 20000;
float rate = (float) 7.5;
float months = 60;
float payment = 450;
float answer = (float) (((amount*(rate/1200))*(1+(Math.pow((rate/1200), months))))/((1+Math.pow((rate/1200), months))-1));
System.out.println(answer);
float answer2 = (log(payment/amount)-log((payment/amount)-(rate/1200)))/(log(1+(rate/1200)));
System.out.println(answer2);
對於第一個方程式,我首先一直遇到錯誤,因為它希望答案為double,並一直告訴我,對於我的費率變量,我無法從double轉換為float,因此必須進行強制轉換。 一旦我發現錯誤消失了,我就會無窮無盡地尋求答案。
對於第二個方程式,它一直說我不能被零除。 有人知道對此有任何解決方案嗎? 在網上查找時,似乎我正確地制定了方程式,所以我不知道如何使它們起作用。
另外,如果有人碰巧知道確定利率的好方法,那將非常有幫助。
您缺少一些強制類型轉換, log
應該是Math.log
。 當我將所有內容都轉換為double時(為什么您如此堅持使用float?使用double意味着您無需將這些強制轉換放在任何地方),我得到以下輸出:
無窮
52.23012630649508
不知道第二個值應該是什么,但這似乎還可以。 沒有警告,沒有錯誤。 關於第一部分,您將被零除。 嘗試這個:
System.out.println(Math.pow(rate/1200, months));
然后您會得到以下很小的數字
5.659799424266714E-133
浮點運算將導致分母為零,因為該值+1會失去精度,因此:
System.out.println(1+Math.pow(rate/1200, months)-1);
屈服值為0.0
,分母將導致第二個結果為無窮大。
您不應該將float / double或raw整數用於貨幣值,而應使用BigDecimal: http : //download.oracle.com/javase/1.4.2/docs/api/java/math/BigDecimal.html
這使得不必執行強制的double-> float強制轉換,我希望錯誤消失。 如果沒有,請在您的新代碼中添加注釋。
對於第二個方程式:
float answer2 = (log(payment/amount)-log((payment/amount)-(rate/1200)))/(log(1+(rate/1200)));
唯一可能的零除是log(1+(rate/1200))
等於0
。 如果(rate/1200)
返回0
則有可能。 您可以通過將兩種情況都轉換為(rate/1200)
浮點數來解決此問題。
從而:
float answer2 = (log(payment/amount)-log((payment/amount)-((float)(rate/1200))))/(log(1+((float)(rate/1200))));
我認為錯誤在於rate/1200
始終為0
因為1200
是整數,除法的解也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.