Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
29 Янв 2023
1 мин
180

Округление чисел в Java: погрешности и их причины

Бывают случаи, когда программа, написанная на Java, не ведёт себя так, как ожидается. Особенно это заметно при работе с числами с плавающей точкой. Примером

Бывают случаи, когда программа, написанная на Java, не ведёт себя так, как ожидается. Особенно это заметно при работе с числами с плавающей точкой. Примером может быть использование метода Math.round(), который округляет число с плавающей точкой до ближайшего целого.

Следующий пример демонстрирует типичную проблему:

double a = 0.5;
double b = 0.49999999999999994;

System.out.println(Math.round(a)); // 1
System.out.println(Math.round(b)); // 1

В этом примере оба числа округляются до 1, хотя второе число меньше 0.5 и интуитивно кажется, что оно должно было округлиться до 0.

Это происходит из-за погрешности при хранении чисел с плавающей точкой. В компьютерах числа с плавающей точкой хранятся в двоичной форме и не все десятичные дроби могут быть точно представлены в этом формате.

Когда мы задаём число 0.49999999999999994, оно не хранится точно таким. Вместо этого, хранится наиболее близкое к нему число, которое может быть представлено в двоичной форме, и это число на самом деле чуть больше 0.5. Поэтому, когда оно округляется с помощью Math.round(), результатом становится 1.

Подобные погрешности связаны с природой чисел с плавающей точкой и их представления в компьютерах. Это важно учитывать при работе с такими числами и планировании алгоритмов, которые на них основаны.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий