Задать вопрос
netslow
@netslow

Почему 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
  • Вопрос задан
  • 394 просмотра
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Java-разработчик
    14 месяцев
    Далее
  • Хекслет
    Java-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Оно округляется, причем вы можете задать число знаков
Ответ написан
netslow
@netslow Автор вопроса
Похоже преобразование double в String происходит в классе FloatingDecimal. Но пока не могу найти место в коде, где происходит округление.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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