2010-12-29 3 views
25

나는 벨기에에 살고 있습니다. 그리고 일반적으로 수학에서 우리는 다음과 같은 쉼표로 소수점을 씁니다. 3,141592
그리고 그 결과는 float입니다.Java : 플로팅 포맷은 Locale에 따라 다릅니다.

System.out.println(String.format("%f", 3.141592)); 

그래서, . 때문에 같은 ,으로 대체됩니다 : 3,141592. 항상 점이 필요할 때마다 다음과 같이 추가해야합니다. String.format("%f", 3.14).replace(',','.');

그래서, 질문 : Java의 모든 포맷터를 쉼표 대신 점으로 사용하는 Locale을 변경하는 방법이 있습니까?

감사


System.out.println(Locale.getDefault()); 

인쇄

nl_BE 
+0

숫자 서식 만 변경 하시겠습니까, 아니면 다른 모든 것들이 미국 로케일로 변경되면 괜찮습니까? – Thilo

+0

흥미 롭다 나는 그것을보고 싶다, 당신의 defaultLocale은 무엇입니까 ?? –

+0

@Thilo : 가능한 경우 : 숫자 서식 만. –

답변

42

형식 지정 중에 사용되는 로케일 설정에만 String.format(Locale.US, "%f", floatValue)을 사용해보십시오.

9

간단한 해결책하지만, 전체 로케일에 걸쳐 도달 넓은 것은, 미국이나 영국에 시스템 로케일을 설정하는 것입니다. 예.

Locale.setDefault(Locale.US); 

질문을 변경 했으므로 인쇄 방법으로 로컬을 지정하기 만하면됩니다.

System.out.println(String.format(Locale.US, "%f", 3.141592)); 
+2

이 문제는 쉼표를 천 단위 구분 기호로 사용하게되어 프랑스어 또는 벨기에 사용자에게 혼란을줍니다. 우리의 TouhsandsSeparator는 공백이며 쉼표는 소수점 구분 기호입니다. – LaGrandMere

+3

포맷 중에 사용 된 로케일을 설정하기 위해서'String.format (Locale.US, "% f", floatValue)'를 사용하십시오. – rodion

+0

@rodion : 답변을 실제 답변으로 추가 할 수 있습니까? –

1

숫자 서식 지정의 경우 실제로는 toString()에 의존해서는 안됩니다. String.format(), 공장 방법은 NumberFormat 또는 DecimalFormat을 사용하십시오. 일부 글로벌 설정에 의존하지 않고 숫자의 형식을 지정하는 방법 (로케일을 선택하여 처음 두 가지 방법)을 제어 할 수 있습니다.

+3

toString은 신뢰할 수있는 로케일 독립적입니다. – Thilo

7

필요는

에 DecimalFormat는 소수를 를 포맷하는 NumberFormat의 구상 서브 클래스 이다 로케일을 사용하여 문자열의 정확한 출력을위한 옵션을 포함 http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html 보는 것이 유용 할 수 있습니다. 서양식, 아랍어, 및 인도어 숫자에 대한 지원을 포함하여 및 등 모든 로케일 형식의 숫자를 구문 분석 할 수 있도록 설계된 다양한 기능을 가지고 있습니다 ( ). 또한 정수 (123), 고정 소수점 숫자 (123.4), 과학 표기법 (1.23E4), 백분율 (12 %) 및 통화 금액 ($ 123)을 포함하여 숫자의 다른 종류를 지원합니다. 이들 모두는 현지화 된 일 수 있습니다.

맞춤식 루틴을 통해 입출력을 라우팅하는 것이 종종 유용합니다. 다음은 미래의 문제 및 개선 사항이 해결 될 가능성이 있음을 확신 할 수 있습니다이를 이용하여

public void print (PrintWriter output, int w, int d) { 
     DecimalFormat format = new DecimalFormat(); 
     format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); 
     format.setMinimumIntegerDigits(1); 
     format.setMaximumFractionDigits(d); 
     format.setMinimumFractionDigits(d); 
     format.setGroupingUsed(false); 
     print(output,format,w+2); 
    } 

자마 라이브러리 (http://math.nist.gov/javanumerics/jama/)에서 하나

관련 문제