Мне нужно округлить float до двух десятичных знаков в Java

Возможный дубликат:
Как округлить число до n десятичных знаков в Java

У меня возникают трудности с округлением поплавка до двух знаков после запятой. Я пробовал несколько методов, которые я видел здесь, включая просто использование Math.round(), но независимо от того, что я делаю, я продолжаю получать необычные числа.

У меня есть список поплавков, которые я обрабатываю, первый в списке отображается как 1.2975118E7. Что такое E7?

Когда я использую Math.round(f) (f - float), я получаю точный номер.

Я знаю, что я делаю что-то неправильно, я просто не знаю, что.

Я просто хочу, чтобы числа были в формате x.xx Первое число должно составлять 1.30 и т.д.

Ответ 1

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

Ответ 2

Если вы ищете форматирование валюты (которое вы не указали, но, похоже, это то, что вы ищете) попробуйте класс 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

Ответ 3

Вы можете использовать DecimalFormat чтобы дать вам стиль, который вы хотите.

DecimalFormat df = new DecimalFormat("0.00E0");
double number = 1.2975118E7;
System.out.println(df.format(number));  // prints 1.30E7

Поскольку это в научной нотации, вы не сможете получить число меньше 10 7, не теряя при этом много порядков точности.

Ответ 4

Попробуйте взглянуть на класс BigDecimal. Это переход к классу для валюты и поддержка точного округления.