Мне нужно округлить 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. Это переход к классу для валюты и поддержка точного округления.