Вывод числа double без экспоненциальной нотации в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы отобразить числа типа double без использования научной нотации в Java, воспользуйтесь классом DecimalFormat:

Java
Скопировать код
double value = 1234.56;
System.out.println(new DecimalFormat("0.######").format(value));

После выполнения этого кода на экран будет выведено значение 1234.56, причём без применения научной нотации. Вы можете самостоятельно настроить формат "0.######" в соответствии с тем, сколько знаков после запятой вам нужно отобразить.

Кинга Идем в IT: пошаговый план для смены профессии

Тонкая настройка форматирования

Использование DecimalFormat для контроля точности

С помощью класса DecimalFormat вы можете управлять количеством знаков после запятой при выводе чисел типа double:

Java
Скопировать код
double pi = Math.PI;
DecimalFormat decimalFormat = new DecimalFormat("#.00000");
System.out.println(decimalFormat.format(pi)); // Отформатированное число Пи: 3.14159

Чтобы адаптировать DecimalFormat к формату принятому в различных локализациях, можно использовать следующий код:

Java
Скопировать код
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ENGLISH);
decimalFormat.setDecimalFormatSymbols(symbols); // Перенастройка формата под английскую локализацию

Применение BigDecimal для работы с особо большими или маленькими числами

При работе с особенно большими или малыми числами полезно воспользоваться классом BigDecimal. Метод toPlainString() позволяет отобразить число без использования научной нотации:

Java
Скопировать код
double value = 0.00000000002;
BigDecimal bigDecimal = new BigDecimal(String.valueOf(value));
System.out.println(bigDecimal.toPlainString());  // Без использования научной нотации: 0.00000000002

Для более точного представления числа создайте объект BigDecimal из строкового представления числа типа double:

Java
Скопировать код
double value = 0.0000003;
BigDecimal exactBigDecimal = new BigDecimal(Double.toString(value));
System.out.println(exactBigDecimal.toPlainString()); // Верное представление: 0.0000003

Форматирование чисел с помощью printf

Если вы привыкли форматировать числа с использованием printf, вы также можете это сделать:

Java
Скопировать код
double value = 3.14159;
System.out.printf("%.2f", value); // Точность до второго знака после запятой

Количество знаков после запятой можно настроить, изменив значение в %.2f.

Визуализация

Отображение чисел типа double без научной нотации можно представить примерно так:

Markdown
Скопировать код
Исходное значение: 123456.789

При игнорировании точности (🔬): 1.23456789E5
Восприятие: "Больше похоже на код для запуска ракеты, чем на число!"

С учётом точности (📏): 123456.789
Восприятие: "Верно, 123,456.789 метров. Это ведь не ракетная наука, просто измерение длины!"

Используя DecimalFormat или String.format, вы можете избежать использования научной нотации:

Java
Скопировать код
DecimalFormat formatter = new DecimalFormat("#.#####");
System.out.println(formatter.format(123456.789)); // Точное и красивое: 123456.789

System.out.println(String.format("%.5f", 123456.789)); // Добавление нулей: 123456.78900

Пусть в вашей работе будет только точность, без лишних сложностей!

Продвинутые способы форматирования чисел типа double

Особые значения чисел с плавающей запятой

Перед выводом числа типа double стоит проверять, не обнаруживается ли каких-то специальных значений:

Java
Скопировать код
double notANumber = Double.NaN;
double infinity = Double.POSITIVE_INFINITY;
if (Double.isNaN(notANumber) || Double.isInfinite(infinity)) {
    System.out.println("Внимание, обнаружено необычное значение!");
}

Влияние локализации на форматирование через DecimalFormat

Помните, что при использовании DecimalFormat применяется формат, принятый в выбранной локализации:

Java
Скопировать код
DecimalFormat decimalFormat = new DecimalFormat("#.00");
decimalFormat.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.FRENCH));
System.out.println(decimalFormat.format(123456.789)); // Французский привет: 123 456,79!

Преодоление проблем точности при работе с типом double

Тип double достаточно удобен для применения в вычислениях, однако из-за своего бинарного представления может давать неточные результаты:

Java
Скопировать код
System.out.println(0.1 + 0.2); // Не совсем точный результат: 0.30000000000000004

Если для вас точность имеет критическое значение, предпочтительнее использовать BigDecimal.

Полезные материалы

  1. DecimalFormat (Java Platform SE 7) — класс для форматирования чисел без применения научной нотации.
  2. BigDecimal (Java Platform SE 7) — для контроля над точностью используйте BigDecimal.
  3. Formatter (Java Platform SE 7) — выведите данные с требуемой точностью.
  4. PrintStream (Java Platform SE 7) — форматируйте вывод данных с помощью функции printf.
  5. NumberFormat (Java Platform SE 7) — применяйте для локализованного форматирования чисел, соответствующего представлениям различных языков и культур.
Свежие материалы