Есть пара примеров :
double a = 100.00;
double b = 99.33;
double res = b-a; //Получится -0.67 OK
double x = 100.00;
double y = 99.95;
double res2 = y-x; // Получится -0.04 ???
Вопрос, почему во втором примере теряется 0.01 ? Как это можно исправить. Пробовал BigDecimal(ROUND_CEILING/FLOOR), но в таком случае уже первый вариант считается неверно.
Отбрасывать знаки после запятой НЕ НУЖНО
Примитивы с плавающей точкой не гарантируют математическую точность в вычислениях из-за особенностей их представления в памяти и операций над ними (кстати, поэтому не следует проверять такие значения на точное равенство, а нужно проверять попадание в интервал) . Если нужна математическая точность, следует пользоваться объектами класса BigDecimal.
"Получится -0.04" - только если Вы отбросите все, начиная с третьей цифры после запятой.
System.out.println(res2); // -0.04999999999999716
System.out.println(Math.round(res2 * 100) / 100.0); // -0.05
System.out.println(String.format("%f", res2)); // -0.050000
System.out.println(String.format("%.2f", res2)); // -0.05
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть какой-то сервер к примеру с 16 CPUЕсть JVM (OpenJDK 8u), запускаемая на нем
У меня есть массив класса VKUserПользователь моей программы должен вводить данные о пользователях, после чего они отправляются в класс через...
Есть сайт с PWA, нужно опубликовать его в Google PlayСделал все по статье: https://habr