У меня возникли проблемы с (как я подозреваю,) ошибкой округления.Java Math.pow() Ошибка округления
У меня есть строка, 0.686357E-01
, которую я пытаюсь преобразовать в двойную. Я смог разбить его, используя функцию Pattern.split()
, и я точно фиксирую значения базы и показателя экспоненты. Однако, как только я попытаюсь их умножить соответствующим образом, я получаю это как результат: 0.06863570000000001
.
Вот мой соответствующий код:
pattern = Pattern.compile("E\\+?");
String[] number = pattern.split(string);
double base = Double.parseDouble(number[0]);
int exponent = Integer.parseInt(number[1]);
number= base*Math.pow(10, exponent);
Итак, как избежать ошибок округления? (Есть способы, которыми я могу обойти это, но если это возможно, то я хотел бы знать, как исправить проблему)
Спасибо.
Где ошибка? –
Это не ошибка округления. Это то, как float/double ведут себя на большинстве языков программирования. У вас никогда не может быть 100% -ной точности, связанной с числами с плавающей запятой. Вот почему люди препятствуют использованию '(float1 == float2)', а просто 'abs (float1 - float2)
Интересно - я никогда не испытывал такого поведения раньше. Нет способа избежать этого? – MattS