쉼표와 반올림을 갖도록 문자열 번호를 어떻게 형식화 할 수 있습니까?


142

나에게 문자열로 주어진 다음 숫자를 형식화하는 가장 좋은 방법은 무엇입니까?

String number = "1000500000.574" //assume my value will always be a String

이 값을 가진 문자열이되기를 원합니다. 1,000,500,000.57

형식을 어떻게 지정합니까?

답변:


256

DecimalFormat수업 을보고 싶을 수도 있습니다 . 다른 로케일을 지원합니다 (예 : 1.000.500.000,57대신 형식이 지정된 일부 국가 ).

해당 문자열을 숫자로 변환해야합니다.이 작업은 다음과 같이 수행 할 수 있습니다.

double amount = Double.parseDouble(number);

코드 샘플 :

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");

System.out.println(formatter.format(amount));

이 특별한 경우에 NumberFormat을 사용하는 방법의 예를 보여줄 수 있습니까?
Sheehan Alam

1
아래 솔루션을 사용할 수도 있습니다-public static String getRoundOffValue (double value) {DecimalFormat df = new DecimalFormat ( "##, ##, ##, ##, ##, ##, ## 0.00"); return df.format (value); }
Jitendra Nath

또한 DecimalFormat formatter = new DecimalFormat ( "#, ## 0.00")과 같은 점 앞에 0을 선호합니다. -제로의 소리가 들리지 않으면 .00이 잘못되었습니다
Leo

46

String.format ()을 사용하여 수행 할 수도 있습니다. String.format ()을 사용하면 한 문자열에서 여러 숫자를 형식화하는 경우 더 쉽고 유연 할 수 있습니다.

    String number = "1000500000.574";
    Double numParsed = Double.parseDouble(number);

    System.out.println(String.format("The input number is: %,.2f", numParsed));
    // Or
    String numString = String.format("%,.2f", numParsed);

형식 문자열 "% ,. 2f"- ","는 쉼표로 구분 된 숫자 그룹을 의미하고 ".2"는 소수점 이하 두 자리로 반올림합니다.

다른 형식화 ​​옵션에 대한 참조는 https://docs.oracle.com/javase/tutorial/java/data/numberformat.html을 참조 하십시오.


42

문자열을 숫자로 변환하면 사용할 수 있습니다

// format the number for the default locale
NumberFormat.getInstance().format(num)

또는

// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)

로케일을 지정 하고 소수점 이하 자릿수를 지정하는 방법은 무엇입니까?
Jonik

6
아, 신경 쓰지 new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(locale))
마라

16

이것이 Google의 검색 결과 중 1 위이므로 format number commas java정수로 작업하고 소수를 신경 쓰지 않는 사람들에게 적합한 답변입니다.

String.format("%,d", 2000000)

출력 :

2,000,000

예를 들어 printf ( "%, f \ n", decimalNumber)와 같은 플로트에도 적용됩니다.
philwalk

12

나만의 포맷 유틸리티를 만들었습니다. 많은 기능을 제공하면서 서식을 처리하는 데 매우 빠릅니다. :)

다음을 지원합니다.

  • 쉼표 형식화 예 : 1234567은 1,234,567이됩니다.
  • "천 (K), 백만 (M), 십억 (B), 조각 (T)"접두사.
  • 0에서 15까지의 정밀도
  • 정밀도 크기 조정 (6 자리 정밀도를 원하지만 3 자리 만 사용할 수 있음을 의미).
  • 접두사 낮추기 (선택한 접두사가 너무 큰 경우 접두사가 더 적합한 접두사로 낮아짐을 의미합니다).

코드는 여기 에서 찾을 수 있습니다 . 당신은 이것을 다음과 같이 부릅니다.

public static void main(String[])
{
   int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
   String formatted = ValueFormat.format(1234567, settings);
}

또한 이것은 십진수 지원을 처리하지 않지만 정수 값에 매우 유용하다는 것을 지적해야합니다. 위의 예는 "1.23M"을 출력으로 표시합니다. 아마도 10 진수 지원을 추가 할 수는 있었지만 그 이후로 너무 많이 사용하지는 않았지만 수학 계산을 위해 압축 된 char [] 배열을 처리하는 BigInteger 유형의 클래스로 병합 할 수도 있습니다.


2
영어로만 작업하는 경우에 좋습니다. 나의 제안은 이해할 수 없었다으로 내 비 영어 사용자의 저녁 식사를 화가로 그런 일을 방지하기 위해 무엇 K이나 M수단
rishabhmhjn

@rishabhmhjn하지만 ... 필요한 문자로 수정하기 위해 조정할 수 있습니까? 당신의 불운은 그의 잘못입니까? : o 그리고 그가 만든 링크는 지금 사용할 수없는 것처럼 보이지만 아주 멋지다 ..
Aquarius Power

@AquariusPower 문제는 예를 들어 일본어 숫자가 미터법을 따르지 않습니다. 그들의 숫자는 100의 경우 1 百, 1000의 경우 1 千, 10000의 경우 1 万와 같으며 1000,0000의 경우 1 千万가됩니다. 우리 팀은 자바 스크립트에서 비슷한 일을하고있었습니다. :이 일에 언급 된 논리를 사용할 수 있습니다 github.com/statusbrew/angular-bignumber
rishabhmhjn

이것에 대한 오래된 코드를 찾았으므로 GitHub에 다시 업로드했습니다. 주석 링크가 업데이트되었습니다.
Jeremy Trifilo

6
public void convert(int s)
{
    System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}

public static void main(String args[])
{
    LocalEx n=new LocalEx();
    n.convert(10000);
}

6

아래 솔루션을 사용할 수도 있습니다-

public static String getRoundOffValue(double value){

        DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
        return df.format(value);
}

4

다음 코드를 사용하여 한 줄로 전체 변환을 수행 할 수 있습니다.

String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));

DecimalFormat 생성자의 마지막 두 # 기호도 0이 될 수 있습니다. 어느 쪽이든 작동합니다.


3

첫 번째 대답은 잘 작동하지만 ZERO / 0의 경우 형식은 .00입니다.

따라서 #, ## 0.00 형식이 잘 작동합니다. 프로덕션 시스템에 배포하기 전에 항상 0 / 100 / 2334.30과 같은 다른 숫자와 음수를 테스트하십시오.


3

가장 간단한 방법은 다음과 같습니다.

String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result)); 

출력 : 10,987,655.88

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