Какой результат выполнения данного кода:

System.out.println( 0.3 == 0.1d + 0.1d + 0.1d );
Explanation
Правильный ответ на этот вопрос связан со способом представления дробных чисел в памяти компьютера. Напомним, что они хранятся в двоичном коде.

Если попробовать перевести 0.1 в двоичную систему счисления, то получится БЕСКОНЕЧНАЯ двоичная дробь 0,000110011001100110011001100... Поскольку в памяти компьютера число представляется с помощью КОНЕЧНОГО количества двоичных разрядов (например, под значение типа double отводится 64 бита), то бесконечная двоичная дробь просто округляется. То число, которое получается в результате округления, будет чуть-чуть (на одну многомиллионную) отличаться от 0.1. Аналогично, двоичное представление для 0.3 будет чуть-чуть отличаться от 0.3.
Получается, что в примере сравниваются два числа, каждое из которых примерно равны 0.3, но они не равны между собой.
Если взять числа с другим двоичным представлением, будет другой результат. Например, System.out.println( 0.375 == 0.125d + 0.125d + 0.125d ) выводит true.

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты