Вы также можете использовать конкретную локаль с помощьюString.format(Locale.GERMAN, "%1$,.2f", myDouble);
Olivier Grégoire
13
Если для форматирования используется более одного двойного числа, используйте% 1,% 2 и т. Д. Например, String.format («% 1 $,. 2f,% 2 $,. 2f», myDouble, aDouble)
Moesio
4
Я считаю, что «% 1 $» является необязательным в этом случае. У меня работает только "%, 2f" в формате String.
Мэтт Пасселл
5
Да, Мэтт прав. %1, %2и так далее, можно использовать для переупорядочения вывода на основе индекса ваших входных аргументов. Смотрите это . Вы можете опустить индекс и порядок по умолчанию будет принят форматером.
praneetloke
1
Вы должны дать объяснение, что означают различные части.
Митулат Бати
41
String.format("%4.3f", x);
Это означает, что нам нужно всего 4 цифры в ANS, из которых 3 должны быть после десятичной. И f это спецификатор формата double. х означает переменную, для которой мы хотим ее найти. Работал на меня. , ,
Я думаю, это означает, что это будет четвертая переменная в аргументах, которые следуют и будут иметь 3 знака после запятой.
Майкл Фултон
@MichaelFulton Это не так просто: 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, поэтому, конечно, лишних пробелов нет.
парсер
24
Если вы хотите отформатировать его с помощью установленных вручную символов, используйте это:
Полезный ответ! Однако последнее предложение «Форматирование на основе локали предпочтительнее» не имеет смысла без контекста. Есть довольно хорошие случаи использования, когда вам НЕ следует использовать форматирование на основе локали, когда вы хотите сгенерировать определенный формат строки. Например, вы осуществляете экспорт своих данных во внешний файл и хотите иметь полный контроль над форматом, независимо от текущей (или какой-либо) локали.
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
String.format(Locale.GERMAN, "%1$,.2f", myDouble);
%1, %2
и так далее, можно использовать для переупорядочения вывода на основе индекса ваших входных аргументов. Смотрите это . Вы можете опустить индекс и порядок по умолчанию будет принят форматером.Это означает, что нам нужно всего 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, поэтому, конечно, лишних пробелов нет.Если вы хотите отформатировать его с помощью установленных вручную символов, используйте это:
Хотя форматирование на основе локали предпочтительнее.
источник
код извлечен из этой ссылки ;
Выходные данные из этого примера показывают, как формат одного и того же числа меняется в зависимости от локали:
источник
И распечатать:
источник
Есть много способов сделать это. Те приведены ниже:
Предположим, ваш оригинальный номер указан ниже: double number = 2354548.235;
Использование
NumberFormat
и режим округленияИспользование строкового форматера
Во всех случаях вывод будет: 2354548.24
Примечание :
Во время округления вы можете добавить
RoundingMode
в свой форматер. Вот несколько режимов округления, приведенных ниже:Вот импорт :
источник
использование
DecimalFormat
источник