monPay = (amtFin * amtI)/((1-(1+amtI)*Math.pow(-n,-n)));
このコードを使用していますが、Math.pow(-n,-n) を正しく計算していません。Math.pow(-n,-n) が 0.0 まで計算しているようです。すべての変数には type がありdouble
ます。
元本などに基づいて毎月のローン返済額を計算しようとしているように見えますが、式が間違ってい(1+amtI)*Math.pow(-n,-n)
ますMath.pow(1+amtI,-n)
。
の値pow(-n,-n)
が小さすぎて a として表すことができませんdouble
(絶対値でのゼロ以外の double の最小値は約 10E-323 です)。
代わりにBigDecimalを使用することもできますが、計算BigDecimal
が遅くなることに注意してください。