2012-12-31 1 views
3

내 문제는 .. NumberFormat 클래스의 format 메서드를 사용하여 숫자를 통화 문자열 (예 : 10.23에서 10.23)으로 포맷하려고하면 값이 자동으로 반올림됩니다. 그리고 이것은 NumberFormat의 getCurrencyInstance() 메소드에 일본어/한국어 로케일을 전달할 때 특별히 발생합니다. 미국 로켈의 경우 문제가 없습니다.값 서식을 지정하는 동안 NumberFormat (Locale) .format() 메서드에 의한 자동 반올림을 피하는 방법은 무엇입니까?

 NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.JAPAN); 
     BigDecimal bd = new BigDecimal(123.456); 
     String str = formatter.format(bd); 
     JOptionPane.showMessageDialog(null, str); // Output is coming ¥123 instead of ¥123.456 

내가 뭔가를 누락되거나 비논리적 일을하고 있다면 나는 확실하지 않다 : 여기에 문제의 명확한 그림을 줄 것이다 조각이다. 그렇지 않다면이 반올림을 막을 수있는 방법이 있습니까? 도와주세요. 것 같다

답변

1

Nambari이 권리입니다. 이것 좀보세요 : 나는 Locale.US에 대해 동일한 작업을 수행 할 때

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.JAPAN); 
BigDecimal bd = new BigDecimal(123.456); 
String str = nf.format(bd); 
System.out.println("" + nf.getMaximumFractionDigits()); //prints out 0 
System.out.println(str); 

이 0으로 설정되어 일본에 대한 기본 분수 숫자처럼 보인다 그것은 분명히 2. Nambari의 대답과 setMaximumFractionDigits 기본값.

이유에 관해서는, 주석으로 지적 해 주신 @ Lee Meador 덕분에 일본 통화는 소수점 이하 자릿수를 사용하지 않습니다 (일명 엔은 여러분이 갈 수있는 한 멀리 있습니다). 일본 엔에 위키 피 디아 기사에서

:

"1 엔 미만의 교단 동전 지불 법의 작은 환율 처분 및 분수 반올림의 집행 다음 12 월 31 일, 1953 무효가되었다"

한국의 통화를보기에는 너무 게으르므로 비슷한 상황이 있다고 가정합니다.

+1

미국과 EU는 달러와 유로 표준 두 자릿수를 사용하는 것과 같이 일본은 표준으로 0 자리를 사용합니다. 대부분의 사람들은 상점에 들어가거나 회계 보고서를보고 두 자리를 제외한 모든 것에 달러 (또는 유로)를 보게되면 혼란 스러울 것입니다. 10 센트의 센트로 판매되지만 너무 많은 것은 아닙니다. 유일한 다른 일반적인 사용법은 전체 달러를 표시하는 것입니다.이것은 예를 들어 미국 세금 신고서에서 할 수 있습니다. –

+0

이것은 유용한 정보입니다. 감사. – Peeyush

+0

+1. @ARC : 나의 대답은 수정을 알려주지 만,이 대답은 문제를 잘 설명합니다. – kosa

3

당신은 NumberFormat

NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.JAPAN); 
    BigDecimal bd = new BigDecimal(123.456); 
    formatter.setMaximumFractionDigits(4); //Replace 4 with whatever value applicable for you. 
    String str = formatter.format(bd); 

출력 setMaximumFractionDigits을 설정해야합니다

¥123.456 
+0

나는 그 방법을 이미 알고 있지만, 출력에서 ​​소수점 이하 자릿수를 제한하고 싶지는 않습니다. JP/KR 같은 로케일에서 format 메소드가 다르게 작동하는 이유는 무엇입니까? – Peeyush

+1

@ user1887318 : getInstance (로캘)을 사용하면 동작이 로캘 별 구현으로 보입니다. http://docs.oracle.com/javase/6/docs/api/java/text/Format.html 및 http://www.javapractices.com/topic/TopicAction.do?Id=210 – kosa

+0

네가 한 말 이해해. 좀 더 자세히 알려 드리겠습니다. NumberFormat이 로캘별로 입력 내용의 형식을 지정하기를 원합니다. 내 입력 123456.789 경우, 나는 Locale.US에 $ 123,456.789과 출력, Locale.FRANCE에서 (123) 456,789 €, 123.456,789 Locale.GERMANY에서 € 및 Locale.JAPAN에서 ¥ 123,456.789를 원한다. 내가 틀렸다면 정정 해주세요. 그러나 그것이 포맷 방법이 어떻게 동작해야하는지입니다. – Peeyush