수천 개의 정수를 쉼표로 문자열로 변환


182

정수 ""를 갖도록 정수 35634646을 변환하려고하므로 35,634,646이어야합니다.

가장 빠른 방법은 무엇입니까?

답변:


292
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

5
나는 추가했다 import java.text.NumberFormat;.
Mike S

6
이렇게하면 항상을 사용하는 미국 스타일 그룹화가 적용 ,되지만 .대신 그룹화에 사용 하는 지역도 있습니다 . 한마디로, 로캘을 하드 코딩하는 것은 나쁜 습관으로 간주됩니다.
Hai Zhang

4
@DreaminginCode 잘 해내 Locale.getCurrent()는 것이 해결책입니다
Roger RV

@RogerRV Locale.getCurrent ()는 없습니다 (적어도 안드로이드에서는)
E.Akio

그러나 이것은 미국에 거주하지 않는 사람들의 96 %에게 가장 적합한 답변은 아닙니다
fig

152

가장 빨리 요구하지만 "최고"또는 "정확한"또는 "일반"을 의미합니까?

또한 수천을 나타내도록 쉼표를 요구하지만 "사용자의 지역 관습에 따라 사람이 읽을 수있는 정상적인 형태"를 의미합니까?

당신은 그렇게합니다 :

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

미국인은 "35,634,646"을 얻을 것이다

독일인은 "35.634.646"을 얻을 것이다

스위스 독일인은 "35'634'646"을 얻을 것이다


각 로캘의 숫자 패턴은 어디에서 얻을 수 있습니까? 코드를 읽으려고했지만 어디서나 찾을 수 없음
nhoxbypass


41

정수 :

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 피드백 마다 편집 되었습니다 .


1
장점 : "신규"가 없으며 DecimalFormat과 달리 가비지 수집기를로드하지 않습니다.
Contango

에서 살펴보십시오 String.format. 그것은 시작 return new Formatter(l) ...가비지 컬렉터 인수가 보인다에서 강한되지 않도록 등.
Scheintod

2
이것은 내가 가장 좋아하는 대답입니다. 질문은 Integer와 함께 작동하도록 요청하므로 코드는 다음과 같습니다. int value = 100000; String.format ( "%, d", 값);
psuzzi

20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

산출: 35,634,646


1
#,###유럽식 형식을 원한다면 패턴을 넘지 않아도 됩니다 #,##,###.
알리

7
@Ali : 귀하가 설명하는 형식은 인도에서만 사용되며, 인도가 유럽에 있지 않다고 확신합니다.
Cairnarvon 2016 년

나는 그것을 얻는다 ... 좋아요. 인디언 포맷이 필요하다면 그렇게하는 것입니다.
Ali

1
이것은 로케일에 따라 다르며 기본 로케일이 천 단위를 a로 구분하지 않는 곳에서 실행하면 올바른 (질문에 따라) 출력을 생성하지 않습니다 ,.
antak

17

다른 답변은 정확하지만 다음을 사용하기 전에 로캘을 다시 확인하십시오 "%,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

3

이 솔루션은 저에게 효과적이었습니다.

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));

3

%d쉼표와 함께 형식 지정자를 사용하십시오 .%,d

이것은 가장 쉬운 방법입니다.


1

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>

1

다음은 "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

코드에 주석을 추가하여 답 을 편집 해보십시오 (아마도 유용한 방법으로 래핑 할 수 있습니다)
noiaverbale

0

확장 사용

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

-1

당신은 사용할 수 없습니다

System.out.printf("%n%,d",int name);

의 쉼표 printf%d인터에 쉼표를 추가해야합니다 .

그것에 대해 긍정적이지는 않지만 나를 위해 일합니다.


그것은 나를 위해 컴파일되지 않습니다
Mishax

"긍정적이지 않다." 무의미한.
Rob Shepherd

-8

먼저 JSTL 태그를 포함시켜야합니다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

페이지 시작시

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.