У меня проблемы с форматированием десятичных знаков двойного числа. Если у меня двойное значение, например 4.0, как мне отформатировать десятичные дроби, чтобы вместо них было 4.00?
У меня проблемы с форматированием десятичных знаков двойного числа. Если у меня двойное значение, например 4.0, как мне отформатировать десятичные дроби, чтобы вместо них было 4.00?
Ответы:
Один из способов - использовать NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Вывод:
4,00
В Java 8 вы можете использовать formatметод ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
fиспользуется для floatingбалла ..2 после десятичной дроби обозначает количество десятичных знаков после запятой .Для большинства версий Java вы можете использовать DecimalFormat: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Используйте String.format :
String.format("%.2f", 4.52135);
Согласно документам:
Всегда используется языковой стандарт, возвращаемый
Locale.getDefault().
Используя String.format, вы можете сделать это:
double price = 52000;
String.format("$%,.2f", price);
Обратите внимание на запятую, которая отличает это от ответа @Vincent
Вывод:
$52,000.00
Хорошим ресурсом для форматирования является официальная страница java по этой теме.
Вы всегда можете использовать статический метод printf from System.out- тогда вы реализуете соответствующее средство форматирования; это экономит место в куче, которое требовалось от вас в других примерах.
Пример:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Экономит место в куче, что является довольно большим бонусом, тем не менее, я считаю, что этот пример намного более управляем, чем любой другой ответ, тем более, что большинство программистов знают функцию printf из C (хотя Java немного меняет функцию / метод).
outэто файл PrintStream.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Альтернативный метод - использовать setMinimumFractionDigitsметод из NumberFormatкласса.
Здесь вы в основном указываете, сколько чисел должно появиться после десятичной точки.
Таким образом, ввод 4.0будет производить 4.00, если ваша указанная сумма равна 2.
Но, если ваш Doubleввод содержит больше, чем указанная сумма, потребуется минимальная указанная сумма, а затем добавить еще одну цифру, округленную вверх / вниз.
Например, 4.15465454при указании минимального количества 2 будет произведено4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Есть много способов сделать это. Они приведены ниже:
Предположим, что ваш исходный номер указан ниже:
double number = 2354548.235;
Использование NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Использование String.format:
System.out.println(String.format("%,.2f", number));
Использование DecimalFormat и шаблона:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Использование DecimalFormat и шаблона
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
Во всех случаях вывод будет: 2354548.23
Примечание :
Во время округления вы можете добавить RoundingModeв свой форматер. Ниже приведены некоторые режимы округления:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Вот импорт :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Вы можете использовать любой из следующих методов
Если вы используете java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
ИЛИ
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0)); Если вы хотите преобразовать его в простой строковый формат
System.out.println(String.format("%.2f", 4.0)); Весь приведенный выше код будет печатать 4.00
Работает на 100%.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Первый импорт NumberFormat. Затем добавьте это:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Это даст вам два десятичных разряда и знак доллара, если он имеет дело с валютой.
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
Сделать это можно следующим образом:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##вместо00
Я знаю, что это старая тема, но если вам действительно нравится использовать точку вместо запятой, просто сохраните результат как X, 00 в String, а затем просто измените его на период, чтобы получить X.00
Самый простой способ - просто заменить.
String var = "X,00";
String newVar = var.replace(",",".");
Результатом будет желаемый X.00 . Также, чтобы упростить задачу, вы можете сделать все это за один раз и сохранить в переменной типа double:
Double var = Double.parseDouble(("X,00").replace(",",".");
Я знаю, что этот ответ сейчас бесполезен, но, возможно, кто-то, кто проверяет этот форум, будет искать быстрое решение, подобное этому.
String.format()илиjava.text.Format.