Преобразование целого числа в строку с запятой для тысяч - PullRequest
158 голосов
/ 16 августа 2011

Я хочу преобразовать целое число 35634646 в тысячу "," поэтому оно должно быть 35,634,646.

Какой самый быстрый способ сделать это?

Ответы [ 12 ]

260 голосов
/ 16 августа 2011
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
142 голосов
/ 16 августа 2011

Вы спрашиваете о самом быстром, но, возможно, вы имеете в виду «лучший» или «правильный» или «типичный»?

Вы также запрашиваете запятые для обозначения тысяч, но, возможно, вы имеете в виду «в обычной удобочитаемой для человека форме в соответствии с местными обычаями вашего пользователя»?

Вы делаете это так:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

Американцы получат "35 634 646"

немцы получат "35.634.646"

Швейцарские немцы получат "35'634'646"

78 голосов
/ 16 августа 2011
int bigNumber = 1234567;
String formattedNumber = String.format("%,d", bigNumber);
31 голосов
/ 29 сентября 2015

Целые числа:

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 обратная связь.

20 голосов
/ 16 августа 2011
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

ВЫХОД : 35 634 346

15 голосов
/ 16 августа 2011

Другие ответы верны, однако перед использованием "%,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
2 голосов
/ 08 июня 2018

Используйте спецификатор формата %d с запятой: %,d

Это самый простой способ.

2 голосов
/ 28 сентября 2015

Это решение сработало для меня:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));
1 голос
/ 13 февраля 2017

Если то же самое должно быть сделано в 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>
0 голосов
/ 08 марта 2019

вот решение для тех из вас, кто не может получить доступ к «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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...