현재 다음 코드를 사용하여 이중을 인쇄합니다.
return String.format("%.2f", someDouble);
이것은 Java가 내 로케일의 소수점 구분 기호 (쉼표)를 사용하고 점을 사용하고 싶은 점을 제외하면 잘 작동합니다. 이 작업을 수행하는 쉬운 방법이 있습니까?
현재 다음 코드를 사용하여 이중을 인쇄합니다.
return String.format("%.2f", someDouble);
이것은 Java가 내 로케일의 소수점 구분 기호 (쉼표)를 사용하고 점을 사용하고 싶은 점을 제외하면 잘 작동합니다. 이 작업을 수행하는 쉬운 방법이 있습니까?
답변:
String.format
로케일을 지정할 수 있는 오버로드를 사용하십시오 .
return String.format(Locale.ROOT, "%.2f", someDouble);
여기에있는 것처럼 숫자 형식 만 지정하는 경우 사용하는 NumberFormat
것이 더 적절할 것입니다. 그러나의 나머지 서식 기능 String.format
이 필요한 경우 제대로 작동합니다.
보다 과감한 해결책은 main () 초기에 로케일을 설정하는 것입니다.
처럼:
Locale.setDefault(new Locale("en", "US"));
추가 로케일을 java.lang.String.format 및 java.io.PrintStream.printf (예 : System.out.printf ())에 전달할 수 있습니다.
import java.util.Locale;
public class PrintfLocales {
public static void main(String args[]) {
System.out.printf("%.2f: Default locale\n", 3.1415926535);
System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535);
System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535);
}
}
결과는 다음과 같습니다 (내 PC에서).
$ java PrintfLocales
3.14: Default locale
3,14: Germany locale
3.14: US locale
Java API의 String.format 을 참조하십시오 .
out.printf((Locale)null, ...)
또는 out.format((Locale)null, ...)
로케일 독립적 인 표현을 얻을 수 있습니다. (그리고있다 Locale.ROOT
)
너무 늦었지만 여기에 언급 된 다른 것은 NumberFormat
(및 하위 클래스 DecimalFormat
) 의 샘플 사용입니다.
public static String format(double num) {
DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance();
decimalSymbols.setDecimalSeparator('.');
return new DecimalFormat("0.00", decimalSymbols).format(num);
}
DecimalFormatSymbols
이 방법을 사용하기 전에 구분선 을 만들고 설정하는 작업을 한 번만 수행해야한다고 생각합니다.
NumberFormat 및 DecimalFormat을 사용할 수 있습니다.
Java Tutorials LocaleSpecific Formatting 에서이 링크를 살펴보십시오.
Locale-Sensitive Formatting이라는 섹션이 필요합니다.
난 .. 같은 문제를 가지고 55.1
로 변환 55,10
. 내 빠른 (더러운?) 수정은 다음과 같습니다.
String.format("%.2f", value).replaceAll(",",".");