Я работаю с функцией Math.pow () и имею следующий код:
double monthlyRate = (0.7d / 12);
int loanLength = 3;
double powerTest = Math.pow(1.00583, 36);
double powerResult = Math.pow((1 + monthlyRate),(loanLength * 12));
При запуске через отладчик значения становятся
powerTest => 1.2327785029794363
powerResult => 7.698552870922063
Первый - правильный. Я вошел в функцию Math.pow в обеих строках назначения. Для powerTest,
параметры для Math.pow
double a => 1.00583
двойной b => 36,0
Для powerResult они
double a => 1.0058333333333333
двойной b => 36,0
Я знаю, что это проблема с тем, как машина выполняет вычисления с плавающей запятой, я просто не знаю, как это исправить Я попытался сделать следующее до вычисления с плохими результатами:
monthlyRate = Math.round(monthlyRate * 1000) / 1000;