Я работаю с Math.pow() функцией, и имею следующий код:Ява 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 являются двойной а => 1,00583 двойной б => 36,0
Для powerResult, они двойной а => +1,0058333333333333 двойной б => 36,0
Я знаю, что это проблема с тем, как машина с плавающей запятой выполняется машиной, я просто не знаю, как ее исправить. Я пытался делать следующее перед расчетом с плохими результатами:
monthlyRate = Math.round(monthlyRate * 1000)/1000;
Что вы ожидаете от (1+ (0.7/12))^(3⋅12)? Я получаю 7.6985528709220588862786 в обычном калькуляторе. –
На Java вы должны использовать BigDecimal для выполнения денежных операций. Проверьте мой ответ. – vz0