java에서 double 형식을 지정하는 String.format ()


178

String.format (format String, X)을 사용하여 다음과 같이 이중 형식을 지정하려면 어떻게해야합니까 ???

2354548.235-> 2,354,548.23

감사!

답변:


295
String.format("%1$,.2f", myDouble);

String.format 기본 로캘을 자동으로 사용합니다.


36
또한 사용하여 특정 로케일을 사용할 수 있습니다String.format(Locale.GERMAN, "%1$,.2f", myDouble);
올리비에 그레 구 아르를

13
포맷 할 double이 둘 이상인 경우 % 1, % 2 등을 사용하십시오. 예를 들어 String.format ( "% 1 $ ,. 2f, % 2 $ ,. 2f", myDouble, aDouble)
Moesio

4
이 경우 "% 1 $"은 (는) 선택 사항입니다. 형식 문자열로 "% ,. 2f"만 있으면 작동합니다.
매트 파셀

5
네, 맞아요 %1, %2등을 사용하여 입력 인수의 색인을 기반으로 출력을 다시 정렬 할 수 있습니다. 참조 . 색인을 생략 할 수 있으며 기본 순서는 포맷터에서 가정합니다.
praneetloke

1
다른 부분이 무엇을 의미하는지 설명해야합니다.
Mitulát báti

41
String.format("%4.3f" , x) ;

이것은 ans에 총 4 자리 숫자가 필요하다는 것을 의미합니다. 그리고 f는 double의 형식 지정자입니다. x는 찾을 변수를 의미합니다. 나를 위해 일했다. . .


1
나는 그것이 소수점 이하 3 자리를 따르는 인수에서 네 번째 변수가 될 것임을 의미한다고 생각합니다.
Michael Fulton

@MichaelFulton 그렇게 쉬운 일이 아닙니다 String.format("%014.3f" , 58.656565).-> 0000000058,657: 총 14 개의 기호 : 8 개의 0과 5 개의 숫자와 1 개의 쉼표. 따라서이 경우 숫자 는 결과 문자열에서 14 총 기호 수 (추가 기호 는 선행 0으로 바뀌고없이 갈 수 있으며 공백으로 바뀔 수 있음) 를 의미합니다 . 이 .3부분은 여기서 완전히 독립적입니다.
파 섹터

그러나 여기 : String.format("%014.3f" , 58.656565)-> 58,657. 환경 설정이 .3f부분으로 이동하기 때문에 그것을 취합니다 . 먼저 소수점 이하 3 자리로 숫자를 인쇄하고 기호가 남아 있으면 선행 공백 (또는 0 / 무엇이든)을 인쇄합니다. 이 경우 숫자는 2 + 3 + 1 = 6 기호이며 4 만 인쇄하기를 원하므로 추가 공백이 없습니다.
파 섹터

24

수동으로 설정 한 기호로 형식을 지정하려면 다음을 사용하십시오.

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

그러나 로케일 기반 형식이 선호됩니다.


3
유용한 답변! 그러나 마지막 문장은 "로케일 기반 형식화가 바람직하지만"문맥이 없으면 의미가 없습니다. 특정 형식의 문자열을 생성하려는 경우 로케일 기반 형식을 사용해서는 안되는 사용 사례가 꽤 있습니다. 예를 들어 데이터를 외부 파일로 내보내기를 구현하고 현재 (또는 다른) 로캘에 의존하지 않고 형식을 완전히 제어하려고합니다.
혼자 지덱

20

이 링크 에서 추출 된 코드 ;

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

이 예제의 출력은 동일한 숫자의 형식이 로케일에 따라 어떻게 다른지 보여줍니다.

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

그리고 인쇄하십시오 :

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


2

이를 수행 할 수있는 방법은 여러 가지가 있습니다. 그것들은 다음과 같습니다.

원래 번호에 다음과 같이 주어진다고 가정하십시오. double number = 2354548.235;

사용 NumberFormat및 반올림 모드

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

문자열 포맷터 사용

System.out.println(String.format("%1$,.2f", number));

모든 경우에 출력2354548.24입니다.

참고 :

반올림 중에 RoundingMode포맷터를 추가 할 수 있습니다 . 다음은 몇 가지 반올림 모드 입니다.

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

수입품은 다음과 같습니다 .

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

1

사용하다 DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.