Как я могу использовать String.format (формат String, X) для форматирования двойной, как следует ???
2354548,235 -> 2 354 548,23
Спасибо!
Как я могу использовать String.format (формат String, X) для форматирования двойной, как следует ???
2354548,235 -> 2 354 548,23
Спасибо!
Ответы:
String.format("%1$,.2f", myDouble);
String.format автоматически использует локаль по умолчанию.
%1, %2и так далее, можно использовать для переупорядочения вывода на основе индекса ваших входных аргументов. Смотрите это . Вы можете опустить индекс и порядок по умолчанию будет принят форматером.
String.format("%4.3f" , x) ;
Это означает, что нам нужно всего 4 цифры в ANS, из которых 3 должны быть после десятичной. И f это спецификатор формата double. х означает переменную, для которой мы хотим ее найти. Работал на меня. , ,
String.format("%014.3f" , 58.656565)-> 0000000058,657: всего 14 символов: 8 нулей, 5 чисел и 1 запятая. Таким образом, в этом случае число 14 означает общее количество символов (лишние заменяются на ведущий ноль, могут обойтись без, затем оно будет заменено пробелом) в строке результата . .3Часть полностью независим здесь.
String.format("%014.3f" , 58.656565)-> 58,657. Я беру это, потому что предпочтение переходит к .3fчасти: сначала она печатает число с 3 десятичными знаками, а после, если остаются символы, она печатает начальные пробелы (или нули / что угодно). В этом случае число составляет 2 + 3 + 1 = 6 символов, и мы хотели только напечатать 4, поэтому, конечно, лишних пробелов нет.
Если вы хотите отформатировать его с помощью установленных вручную символов, используйте это:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25
Хотя форматирование на основе локали предпочтительнее.
код извлечен из этой ссылки ;
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " +
currentLocale.toString());
Выходные данные из этого примера показывают, как формат одного и того же числа меняется в зависимости от локали:
345 987,246 fr_FR
345.987,246 de_DE
345,987.246 en_US
public class MainClass {
public static void main(String args[]) {
System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);
System.out.printf("Default floating-point format: %f\n", 1234567.123);
System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);
System.out.printf("Line-up positive and negative values:\n");
System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
}
}
И распечатать:
3 (3) +3 00003
Формат
с
плавающей точкой по умолчанию: 1234567,123000 С плавающей точкой с запятыми: 1.234.567,123000 Отрицательное значение с плавающей точкой по умолчанию: -1.234.567,123000
Отрицательный параметр с плавающей точкой: (1.234.567, 123000)
Состав положительных и отрицательных значений: 1.234.567,12
-1.234.567,12
Есть много способов сделать это. Те приведены ниже:
Предположим, ваш оригинальный номер указан ниже: double number = 2354548.235;
Использование NumberFormatи режим округления
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
decimalFormatter.setRoundingMode(RoundingMode.CEILING);
String fString = decimalFormatter.format(number);
System.out.println(fString);
Использование строкового форматера
System.out.println(String.format("%1$,.2f", number));
Во всех случаях вывод будет: 2354548.24
Примечание :
Во время округления вы можете добавить 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;
использование DecimalFormat
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(myDouble);
System.out.println(fString);
String.format(Locale.GERMAN, "%1$,.2f", myDouble);