2016-09-12 7 views
1

Androidでは、特定の数値フォーマットの通貨をフォーマットしようとしています。ロケールと異なる通貨の通貨フォーマット

私の番号はフランスのフォーマット(9 876 543,21)でフォーマットする必要がなく、通貨記号は通貨によって置かれるべきである:EUR

  • $9 876 543,21ため

    • 9 876 543,21 € USD
    のために

    ここに私のコードがあります(これはjava.utilクラスを使用しますが、結果はandroid.icuパッケージと同じです):

    final Double of = Double.valueOf("9876543.21"); 
    final Currency usd = Currency.getInstance("USD"); 
    final NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.FRANCE); 
    currencyInstance.setCurrency(usd); 
    Log.d("test", currencyInstance.format(amount)); 
    

    NumberFormatがフランス語のロケールを使用しているため、出力は9 876 543,21 $USです。

    注:ロケールは、数字の書式が適切であるためにはFRANCE(またはFRENCH)でなければならず、実際に通貨コード(EUR、USD、GBPなど)はわかりません。ウェブサービス。

    フランス語の書式設定を希望しているが、シンボルの通貨プレースメントを尊重する必要があることをフォーマッタに伝える方法はありますか?

  • +0

    を達成するためにトリングているものであるあなたは、通貨に応じた記号を望む程度か?ネットのクイックスキムから、シンボルの配置は通貨ではなく表示ロケールによって決定されるように見えます(したがって、フランスのロケールでは$が正しいように見えます)。 – TripeHound

    +0

    それは私がネットの周りを読んで学んだことです。しかし、私はちょうどこれのような通貨書式を実装するように言われているし、それは標準のNumberFormatterで実行可能かどうかと思っていた。私はおそらく、 "ビジネス"の人たちに、標準化されたフォーマットで通貨をフォーマットするためにロビー活動を始めるべきです。 – pdegand59

    答えて

    1

    これは、私が思うに、完璧に動作はあなたが

    final Double of = Double.valueOf("9876543.21"); 
    
        NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("EUR")); 
        Log.d("test", currencyInstance.format(of)); 
        currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("GBP")); 
        Log.d("test", currencyInstance.format(of)); 
        currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("SEK")); 
        Log.d("test", currencyInstance.format(of)); 
        currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("USD")); 
        Log.d("test", currencyInstance.format(of)); 
    
    private Locale getLocalFromISO(String iso4217code){ 
        Locale toReturn = null; 
        for (Locale locale : NumberFormat.getAvailableLocales()) { 
         String code = NumberFormat.getCurrencyInstance(locale). 
           getCurrency().getCurrencyCode(); 
         if (iso4217code.equals(code)) { 
          toReturn = locale; 
          break; 
         } 
        } 
        return toReturn; 
    } 
    //Prints 
    //9.876.543,21 € 
    //£9,876,543.21 
    // 9 876 543,21 kr 
    //US$9,876,543.21 
    
    +0

    こんにちは、私の問題は、コード内の通貨を知らないことです。 WebサービスからISOコード(USD、EUR、GBP)のみを取得するので、NumberFormatに適切なロケールを使用することはできません。 あなたの例では、USDの出力は私のケースでは '$ 9 876 543,21'(数字の前に通貨記号が付いたフランス語の書式)でなければなりません。 – pdegand59

    +0

    私はスイッチ、ネストされたifステートメントだけを使うことはできませんか?あなたがあなたがEURのようなユーロの国を選んだ場合、あなたはあなたがわずかしか持っていないので、これは問題ではないと思うので、あなたはEURを得るならば 'currencyInstance'をUSに設定します。 –

    +0

    これは銀行のアプリですので、理論的には、EUR、USD、SEK、DKK、CADなどの通貨コードを取得することができます。 – pdegand59