Строковые огромные десятичные числа в Java

double a=816992306.6297043221;
System.out.println("a = "+a);

Проблема в том, что число слишком велико для double, и оно дает следующий результат:

a=8.169923062970433E7

Когда я уменьшаю число, результат отображается правильно. Какое эффективное решение этой проблемы?

Число не слишком велико для дубля. Это просто показано в научных обозначениях. В этом нет ничего плохого, это предполагаемое поведение.

Ben 30.05.2018 14:28

Возможный дубликат Double против BigDecimal?

Patrick Parker 30.05.2018 14:28

Учитывая ответ Давиде Лоренцо МАРИНО, это действительно правильно, хотя вы теряете точность по последним 3 десятичным знакам.

Ben 30.05.2018 14:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
44
2

Ответы 2

Вы можете использовать номер BigDecimal вместо double:

Immutable, arbitrary-precision signed decimal numbers.

BigDecimal может представлять любое число с выбранной точностью.

Double имеет пределы для максимального и минимального значений и по точности.

Я думаю, это проблема точности.

https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

Вы можете проверить эту ссылку, чтобы узнать о формате.

Вы можете использовать класс DecimalFormat

double d1 = 3.14159;
double d2 = 1.235;

DecimalFormat format = new DecimalFormat("#.##");

double roundedD1 = format.format(d1); // 3.14
double roundedD2 = format.format(d2); // 1.24

Если вы хотите установить точность во время выполнения.

format.setMaximumFractionDigits(precision);

Другие вопросы по теме