double a=816992306.6297043221;
System.out.println("a = "+a);
Проблема в том, что число слишком велико для double, и оно дает следующий результат:
a=8.169923062970433E7
Когда я уменьшаю число, результат отображается правильно. Какое эффективное решение этой проблемы?
Возможный дубликат Double против BigDecimal?
Учитывая ответ Давиде Лоренцо МАРИНО, это действительно правильно, хотя вы теряете точность по последним 3 десятичным знакам.




Я думаю, это проблема точности.
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);
Число не слишком велико для дубля. Это просто показано в научных обозначениях. В этом нет ничего плохого, это предполагаемое поведение.