У меня проблемы с форматированием десятичных знаков двойного числа. Если у меня двойное значение, например 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
.