簡體   English   中英

如何在Java中執行貸款方程式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM