Ответы:
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
,
, однако есть также регионы, которые используют .
для группировки. Одним словом, жесткое программирование локали считается плохой практикой.
Locale.getCurrent()
есть решение
Вы спрашиваете о самом быстром, но, возможно, вы имеете в виду «лучший» или «правильный» или «типичный»?
Вы также просите запятые, чтобы указать тысячи, но, возможно, вы имеете в виду «в обычной удобочитаемой для человека форме в соответствии с местным обычаем вашего пользователя»?
Вы делаете это так:
int i = 35634646;
String s = NumberFormat.getIntegerInstance().format(i);
Американцы получат "35 634 646"
Немцы получат "35.634.646"
Швейцарские немцы получат «35'634'646»
int bigNumber = 1234567;
String formattedNumber = String.format("%,d", bigNumber);
Целые:
int value = 100000;
String.format("%,d", value); // outputs 100,000
парный:
double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31
String.format довольно мощный.
- Отредактировано в соответствии с psuzzi обратной связи.
String.format
. Это начинается с return new Formatter(l) ...
и т.д. Таким образом, аргумент сборщика мусора не так силен, как кажется.
int value = 35634646;
DecimalFormat myFormatter = new DecimalFormat("#,###");
String output = myFormatter.format(value);
System.out.println(output);
Вывод: 35,634,646
#,###
, если вы хотите европейский стиль форматирования, то вы можете использовать #,##,###
.
,
.
Другие ответы верны, однако дважды проверьте вашу локаль перед использованием "%,d"
:
Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);
Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);
Результат:
35,634,646
35 634 646
Используйте %d
спецификатор формата с запятой:%,d
Это, безусловно, самый простой способ.
Если то же самое должно быть сделано в JSP, используйте:
<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>
Конечно, для нескольких значений используйте:
<c:forEach items="${yourlist}" var="yourlist">
<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>
</c:forEach>
Вот решение для тех из вас, кто не может получить доступ к «numberformat» или «String.format» (используя ограниченную версию Java внутри фреймворка). Надеюсь, это полезно.
number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0) {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1; }
formattedString
использовать расширение
import java.text.NumberFormat
val Int.commaString: String
get() = NumberFormat.getInstance().format(this)
val String.commaString: String
get() = NumberFormat.getNumberInstance().format(this.toDouble())
val Long.commaString: String
get() = NumberFormat.getInstance().format(this)
val Double.commaString: String
get() = NumberFormat.getInstance().format(this)
результат
1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456
ты не можешь использовать
System.out.printf("%n%,d",int name);
Запятая в printf
должна добавить запятые в %d
интер.
Не уверен, но у меня работает.
import java.text.NumberFormat;
.