У меня возникли проблемы с форматированием десятичных знаков двойки. Если у меня двойное значение, например. 4.0, как мне форматировать десятичные знаки так, чтобы вместо него было 4.00?
Двойное десятичное форматирование в Java
Ответ 1
Один из способов использования NumberFormat.
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Вывод:
4.00
Ответ 2
С помощью 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));
Ответ 3
Используйте String.format:
String.format("%.2f", 4.52135);
Ответ 4
Используя String.format, вы можете сделать это:
double price = 52000;
String.format("$%,.2f", price);
Обратите внимание на запятую, которая отличает ее от ответа @Vincent
Вывод:
$52,000.00
Хорошим ресурсом для форматирования является официальная java-страница по теме
Ответ 5
Вы всегда можете использовать статический метод printf from System.out
- вы должны реализовать соответствующий форматтер; это экономит кучу пространства, в котором вам нужны другие примеры.
Пример:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Сохраняет кучу пространства, которое является довольно большим бонусом, тем не менее я придерживаюсь мнения, что этот пример намного более управляем, чем любой другой ответ, тем более, что большинство программистов знают функцию printf из C (Java немного меняет функцию/метод).
Ответ 6
new DecimalFormat("#0.00").format(4.0d);
Ответ 7
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
Ответ 8
Альтернативным методом является метод 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));
Ответ 9
Работает 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));
}
}
Ответ 10
Есть много способов сделать это. Те приведены ниже:
Предположим, ваш оригинальный номер указан ниже:
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;
Ответ 11
Вы можете использовать любой из следующих способов
Если вы используете
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
Ответ 12
Первый импорт 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));
}
}
Ответ 13
Вы можете сделать это следующим образом:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Ответ 14
Я знаю, что это старая тема, но если вам действительно нравится этот период вместо запятой, просто сохраните свой результат как X, 00 в String, а затем просто просто измените его на период, чтобы получить x.00
Самый простой способ - просто заменить.
String var = "X,00";
String newVar = var.replace(",",".");
Вывод будет X.00, который вам нужен. Также, чтобы сделать это легко, вы можете сделать все это на одном и сохранить его в двойной переменной:
Double var = Double.parseDouble(("X,00").replace(",",".");
Я знаю, что этот ответ сейчас не полезен, но, возможно, кто-то, кто проверяет этот форум, будет искать быстрое решение, подобное этому.