Возможный дубликат: Как округлить число до n знаков после запятой в Java
У меня возникли трудности с округлением числа float до двух знаков после запятой. Я пробовал несколько методов, которые видел здесь, включая простое использование Math.round()
, но независимо от того, что я делаю, я продолжаю получать необычные числа.
У меня есть список плавающих чисел, которые я обрабатываю, первое в списке отображается как 1.2975118E7
. Что такое E7
?
Когда я использую Math.round(f)
(f - плавающая цифра), я получаю точно такое же число.
Я знаю, что делаю что-то не так, но не уверен, что именно.
Я просто хочу, чтобы числа были в формате x.xx
. Первое число должно быть 1.30
и т.д.
1.2975118E7
- это научная нотация.
1.2975118E7 = 1.2975118 * 10^7 = 12975118
Кроме того, Math.round(f)
возвращает целое число. Вы не можете использовать его для получения желаемого формата x.xx
.
Вы можете использовать String.format
.
String s = String.format("%.2f", 1.2975118);
// 1.30
Если вам нужно форматирование валюты (что вы не указали, но, похоже, это то, что вы ищете), попробуйте класс NumberFormat
. Он очень прост:
double d = 2.3d;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String output = formatter.format(d);
Что выведет (в зависимости от локали):
$2.30
Также, если валюта не требуется (только точные два знака после запятой), вы можете использовать это вместо этого:
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String output = formatter.format(d);
Что выведет 2.30
.
Вы можете использовать DecimalFormat
, чтобы дать вам стиль, который вы хотите.
DecimalFormat df = new DecimalFormat("0.00E0");
double number = 1.2975118E7;
System.out.println(df.format(number)); // prints 1.30E7
Поскольку она's в научной нотации, вы выиграли'т быть в состоянии, чтобы получить число меньше, чем 10<суп>7</суп> без потери, что на много порядков точности.
Попробуйте посмотреть на класс BigDecimal. Это класс для работы с валютой и поддержки точного округления.