2017-04-25 3 views
0

DecimalFormat을 사용하여 주어진 형식 문자열로 숫자의 서식을 지정하려고합니다. 이 내용은 oracle java docs에 설명되어 있습니다.DecimalFormat은 주어진 패턴을 무시하지만 Locale을 사용합니다

public class DecimalFormatDemo { 

    static public void customFormat(String pattern, double value) { 
    DecimalFormat myFormatter = new DecimalFormat(pattern); 
    String output = myFormatter.format(value); 
    System.out.println(value + " " + pattern + " " + output); 
    } 

    static public void main(String[] args) { 
    customFormat("###,###.###", 123456.789); 
    } 
} 

하지만 내 출력 내 독일어 OS에서 독일어 형식 ​​스타일이다는 :

actual: 123456.789 ###,###.### 123.456,789 
expected: 123456.789 ###,###.### 123,456.789 

나는 explicitly set the separators을 할 수있는 것을 알고있다. 그러나 오라클 워드 프로세서와 같은 문자열로 형식을 설정할 수 있기를 원합니다. 내 OS 로케일과 독립적이어야합니다.

답변

2

기본 로케일이 독일어이므로 독일어 숫자 형식을 사용 중입니다. 그것을 변경하고 싶은 경우는, DecimalFormat의 기본이되는 수치 포맷의 다른 로케일을 선택합니다.

예 :

import java.text.DecimalFormat; 
import java.text.NumberFormat; 
import java.util.Locale; 
public class DecimalFormatDemo { 

    static public void customFormat(String pattern, double value) { 

    NumberFormat nf1 = NumberFormat.getNumberInstance(Locale.ENGLISH); 
    DecimalFormat df1 = (DecimalFormat)nf1; 
    df1.applyPattern(pattern); 
    String output = df1.format(value); 
    System.out.println("Input: " + value + ", pattern: " + pattern + " output: " + output); 


    NumberFormat nf2 = NumberFormat.getNumberInstance(Locale.GERMAN); 
    DecimalFormat df2 = (DecimalFormat)nf2; 
    df2.applyPattern(pattern); 
    output = df2.format(value); 
    System.out.println("Input: " + value + ", pattern: " + pattern + " output: " + output); 

    } 

    static public void main(String[] args) { 
    customFormat("###,###.###", 123456.789); 
    } 
} 

출력 :

Input: 123456.789, pattern: ###,###.### output: 123,456.789 
Input: 123456.789, pattern: ###,###.### output: 123.456,789 
관련 문제