Почему System.out.println(1.55d) печатает 1.55, хотя это число не может быть представлено без потери точности?

Насколько я понимаю, число 1.55 не может быть точно представлено в двоичном виде в стандарте представления чисел с плавающей точкой IEEE-754. Если мы ввёдем 1.55, то в памяти на самом деле будет:
1.5500000000000000444089209850062616169452667236328125
jshell> System.out.println(new BigDecimal(1.55));
1.5500000000000000444089209850062616169452667236328125

Но почему, когда мы выводим на экран double, то оно выводится корректно?
jshell> System.out.println(1.55d);
1.55
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Оно округляется, причем вы можете задать число знаков
Ответ написан
netslow
@netslow Автор вопроса
Похоже преобразование double в String происходит в классе FloatingDecimal. Но пока не могу найти место в коде, где происходит округление.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы