Функция округления обеспечивает другое значение - PullRequest
0 голосов
/ 25 июня 2019

Я использую math.round() для округления. это код:

double value=0.14499999970197677;
double rounded;
rounded=Math.round( value* 1000.0) / 1000.0;
rounded=Math.round( rounded* 100.0) / 100.0;
System.out.println("Final value :" + rounded);

Я ожидаю, что он должен вернуть 0.15, но он возвращается 0.14 Кроме того, если значение равно 0.13499999970197677, то возвращается 0.14, почему бы не 0.13 Я уже перебрал много ссылок, связанных с округлением. но все еще не ясно. Пожалуйста, скажите мне ясно, почему это происходит с обоими числами?

1 Ответ

0 голосов
/ 25 июня 2019

Арифметика с плавающей точкой не является точной.После первого присваивания rounded равно 0,145, умножение на 100 будет усечено, так что это будет что-то вроде 14.499999999999, который округляется до 14, делится на 100, как вы видели, 0,14.

ОБНОВЛЕНИЕ:на самом деле, деление на 1000 уже будет усечено, поэтому результат будет больше похож на 0.1449999999.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...