2011-08-20 2 views
35

계산 된 금액을 인쇄하는 앱이 있으며 그 값을 기본 통화 형식으로 표시하고 싶습니다.장치 통화 형식으로 부동 값 서식을 지정하는 방법은 무엇입니까?

유럽에서 예를 들어, 당신은 작성합니다

1.000,95 € 미국에서

난 당신이 다른 통화에

1,000.95 $

쓰기 것이라고 생각 다소 소수점으로 표시되는 값은 미국에서 2이지만 일본에서는 0이됩니다.

모든 기존 통화에 대한 rmat?

답변

65

해결책을 찾았습니다. 클래스 NumberFormat에는 미리 정의 된 포맷터가 여러 개 있습니다. Currency 값을 형식화하는 메소드도 있습니다.

정적 메서드 getCurrencyInstance를 사용하는 경우 클래스는 장치 기본 통화에 대한 포맷터를 반환합니다. 나는 내 결과를 설정하려면 다음 코드를 사용

NumberFormat format = NumberFormat.getCurrencyInstance(); 
((TextView) findViewById(R.id.text_result)).setText(format.format(result)); 
+1

결과 변수가있는 형식이다 ?? –

+1

결과 = 1000에서 어떤 일이 일어나고 휴대 전화 로캘이 FR이지만 미국에 있습니까? 1,000 달러 대신 1 000 유로를 쓸 것인가? 통화 형식이 변환 또는 결과가 올바르게 반영되지 않습니까? –

2

체크 아웃 DecimalFormat.

그것은 가능 구문 분석과 서양, 아랍어, 또는 인도어 숫자에 대한 지원을 포함한 모든 로케일에서 형식 번호, 수 있도록 설계된 다양한 기능이 있습니다. 또한 정수 ("123"), 고정 소수점 수 ("123.4"), 과학 표기법 ("1.23E4"), 백분율 ("12 %"), 및 통화 금액 을 포함하여 숫자의 다른 종류를 지원합니다. ("$ 123"). 이러한 모든 맛은 쉽게 현지화 될 수 있습니다.

39

완성도를 위해서 당신은 그러나 당신의 선택의 통화와 휴대 전화의 현재 로케일 (올바른 소수 마크와 1000 개 단위 구분)에 가격을 표시한다고 가정합니다.

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.getDefault()); 
format.setCurrency(Currency.getInstance("CZK")); 
String result = format.format(1234567.89); 

result 다음이 값 개최 것입니다 : 당신은 가격에 대한 소수 부분을 생략하려는 경우 미국과

  • CZK1,234,567.89 체코어 로케일

  • 1 234 567,89 Kč 로케일을 ($199.00 대신 $199 표시) 포맷터를 사용하기 전에 이것을 호출하십시오 :

    format.setMinimumFractionDigits(0); 
    

    모든 옵션은 NumberFormat docs입니다.

    @TargetApi(Build.VERSION_CODES.N) 
        public static Locale getCurrentLocale(Context c) { 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
          return c.getResources().getConfiguration().getLocales().get(0); 
         } else { 
          //noinspection deprecation 
          return c.getResources().getConfiguration().locale; 
         } 
    

    하고 포맷 할 :

  • +0

    이 링크는 로케일에 유용합니다. http://stackoverflow.com/questions/4212320/get-the-current-language-in-device?rq=1 –

    +0

    누군가 올바른 통화 기호를 가져 오는 데 문제가있는 경우에는 https : //stackoverflow.com/questions/9777689/how-to-get-numberformat-instance-from-currency-code –

    0

    얻을 수있는 장치 로케일이 사용할 수

     double num = 1323.526; 
    
         NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(getCurrentLocale(getContext())); 
         defaultFormat.format(num) 
    
    관련 문제