2

私は、ユーザーがローンを検討する際にさまざまな側面を判断できるようにするプログラムを作成しようとしています。最初の方程式は、ローンの金額、利率、月数が与えられた場合に、毎月の支払いがいくらになるかを決定することになっています。2 番目の方程式は、ローンの金額、利率、および毎月の支払いが与えられた場合に、何回の支払い (または月) を行う必要があるかを決定することになっています。これは私がテストしているコードですが、有効な出力が得られないようです。

    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 に変換できないため、キャストを入れる必要があることを伝え続けたためです。エラーがなくなると、答えが無限に増え続けます。

2 番目の方程式では、ゼロで割ることはできないと言い続けています。誰もこれに対する解決策を知っていますか。オンラインで見ると、方程式を正しく定式化しているように見えるので、それらを機能させる方法がわかりません。

また、利率の計算式をご存知の方がいらっしゃれば大変助かります。

4

3 に答える 3

3

いくつかのキャストが欠落しておりlogMath.log. すべてを double に変換すると (なぜフロートの使用に固執するのですか? double を使用すると、それらのキャストをどこにでも配置する必要がなくなります)、次の出力が得られます。

インフィニティ
52.23012630649508

2 番目の値がどうあるべきかはわかりませんが、問題ないようです。警告もエラーもありません。最初の部分については、ゼロで割っています。これを試して:

System.out.println(Math.pow(rate/1200, months));

そして、次の小さな小さな数を取得します

5.659799424266714E-133

浮動小数点演算では、分母がゼロになります。その値 +1 は精度を失うため、次のようになります。

System.out.println(1+Math.pow(rate/1200, months)-1);

利回り0.0と分母によって、2 番目の結果が無限大になります。

于 2011-09-19T13:21:18.657 に答える
2

金額には float/double または生の整数を使用しないでください。代わりに BigDecimal を使用してください: http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigDecimal.html

これにより、強制的な double->float キャストを行う必要がなくなり、エラーが消えることを願っています。そうでない場合は、新しいコードでコメントを追加してください。

于 2011-09-19T13:17:17.833 に答える
0

2 番目の式の場合:

float answer2 = (log(payment/amount)-log((payment/amount)-(rate/1200)))/(log(1+(rate/1200)));

ゼロによる唯一の可能な除算は if log(1+(rate/1200))equals です0(rate/1200)を返す場合、これは可能です0(rate/1200)両方のオカレンスに対して float にキャストすることで、これを解決できます。

したがって:

float answer2 = (log(payment/amount)-log((payment/amount)-((float)(rate/1200))))/(log(1+((float)(rate/1200))));

rate/1200エラーは常に01200整数であり、除算の解もそうであるという事実にあると思います。

于 2011-09-19T13:17:23.183 に答える