2013-02-27 6 views
20

Ich versuche, die Währungssymbole basierend auf ihrem Gebietsschema zu erhalten. Aber anstatt ein Symbol zurückzugeben, gibt es den Code zurück. Ich habe einen Code-Schnipsel:Währungssymbole für bestimmte Ländereinstellungen nicht erhalten

import java.util.Currency; 
import java.util.Locale; 

public class CurrencyFormat 
{ 
    public void displayCurrencySymbols() 
    { 
    Currency currency = Currency.getInstance(Locale.US); 
    System.out.println("United States: " + currency.getSymbol()); 
    } 
    public static void main(String[] args) 
    { 
    new CurrencyFormat().displayCurrencySymbols(); 
    } 
} 

Für Locale.US es geben wird Symbol $ aber Wenn ich

Currency currency = Currency.getInstance(Locale.US); 

mit

Currency currency = Currency.getInstance(Locale.GERMANY); 

ersetzen dann statt Symbol wird geben die Landesvorwahl. Warum ist das und wie können wir die Symbole bekommen?

EDIT: Nach einigen Antwort suchen würde ich löschen möchte, dass einige spezifische lokale Standardeinstellung ist keine Lösung, wie ich alle avalaible Zeichen müssen sofort angezeigt.

z.B.

wird mir das Eurozeichen geben, aber für doller wird es den Code anstelle von doller sign ($) geben.

+0

ich 'USD' eher als ein' $ ', mit der neuesten Java 7 auf Windows 7. Mein Standard-Locale britischen ist jedoch. Für Deutschland sehe ich ein Eurozeichen und für UK sehe ich ein Pfundzeichen. –

+0

Welche Java-Version verwenden Sie? –

+0

Wenn ich 'Locale.setDefault (Locale.US);' setze, bekomme ich die gleichen Ergebnisse wie du. –

Antwort

30

hallo bitte versuchen Sie den folgenden Code

import java.text.NumberFormat; 
import java.util.Comparator; 
import java.util.Currency; 
import java.util.Locale; 
import java.util.SortedMap; 
import java.util.TreeMap; 

public class CurrencyExample 
{ 
    public static void main(String[] args) 
    { 
     Utils.getCurrencySymbol(Currency.getInstance(Locale.US).getCurrencyCode()); 
     Utils.getCurrencySymbol(Currency.getInstance(Locale.JAPAN).getCurrencyCode()); 
     Utils.getCurrencySymbol(Currency.getInstance(Locale.UK).getCurrencyCode()); 
     Utils.getCurrencySymbol("INR"); 
    } 
} 

class Utils{ 
     public static SortedMap<Currency, Locale> currencyLocaleMap; 
     static { 
      currencyLocaleMap = new TreeMap<Currency, Locale>(new Comparator<Currency>() { 
      public int compare(Currency c1, Currency c2){ 
       return c1.getCurrencyCode().compareTo(c2.getCurrencyCode()); 
      } 
     }); 
     for (Locale locale : Locale.getAvailableLocales()) { 
      try { 
       Currency currency = Currency.getInstance(locale); 
      currencyLocaleMap.put(currency, locale); 
      }catch (Exception e){ 
     } 
     } 
    } 

    public static String getCurrencySymbol(String currencyCode) { 
     Currency currency = Currency.getInstance(currencyCode); 
     System.out.println(currencyCode+ ":-" + currency.getSymbol(currencyLocaleMap.get(currency))); 
     return currency.getSymbol(currencyLocaleMap.get(currency)); 
    } 
} 

Die Ausgabe des obigen Programms ist wie folgt aus:

USD:-$ 
JPY:-¥ 
GBP:-£ 
INR:-Rs. 
+1

Danke Amrit, genau das habe ich gesucht. –

+0

Das ist brilliant! Danke –

+0

Eine Währung kann mehrere Symbole haben. Beispiel: USD hat auch das Symbol "US $" für das lokale "es_US" (Java8, Win7 auf meiner VM). Und Unterschied Währungen können die gleichen Symbole haben, z. B .: USD, AUD – brabenetz

10

Sie sehen, was Java Benutzer in Ihrem Standardgebietsschema erwartet für ein Währungssymbol zu sehen. Dies wird auch von den Javadocs für getSymbol() bestätigt:

Ruft das Symbol dieser Währung für das Standardgebietsschema ab. Zum Beispiel ist das Symbol für den US-Dollar "$", wenn das Standardgebietsschema die USA ist, während es für andere Gebietsschemas "US $" sein kann. Kann kein Symbol ermittelt werden, wird der Währungscode nach ISO 4217 zurückgegeben.

Durch Ihr Standardgebietsschema zu ändern:

Locale.setDefault(Locale.UK); // e.g. 

können Sie experimentieren, diese für sich selbst zu beweisen. (Hinweis: Ich schlage nicht vor, dies ist eine Lösung, nur eine Gelegenheit für Sie zu überprüfen, was andere Locales sehen).

Ich würde empfehlen, dass Sie bei dem bleiben, was Java für Ihr Standardgebietsschema für geeignet hält - ich bin sicher, es ist für Ihre Benutzer verständlich.


Es könnte attraktiv erscheinen die „normale“ Währungssymbol für jede Währung zu suchen, nehmen jedoch einen Blick auf die folgende Liste Währung: http://www.xe.com/symbols.php.

Schauen Sie, wie viele Länder ihre Währung mit einem $ Symbol erkennen. Ägypten verwendet auch das britische Pfund-Symbol (£). Die ganze Idee hinter dem Gebietswährungssymbol ist, Ihnen eine Zeichenkette zu geben, die Benutzer in Ihr Gebietsschema verstehen werden.

+0

Einstellung Standard local für UK gibt mir das EURO-Zeichen, aber jetzt bekomme ich nicht das $ -Zeichen. –

+0

Das Standardgebietsschema kann sehr gut * nicht * das Gebietsschema des Benutzers sein - denke Webapp ... –

+1

@JonSkeet Aber das wird immer eine Herausforderung für Webapps sein. Sogar bis zu dem Zeitpunkt, zu dem die Zeit betrachtet werden sollte. Ich hätte gedacht, dass die meisten Webapps entweder an einem Gebietsschema (in einem "Deal mit, Benutzer" -Sinn) behoben wurden oder dem Benutzer erlauben, ein Gebietsschema, eine Zeitzone usw. auszuwählen. –

3

Eine einfachere Lösung, basierend auf Amrit Raj Sharma ‚s Antwort:

einfach hinzufügen das Gebietsschema als Parameter für die Methode getSymbol().

So ändern Sie Ihren Code:

import java.util.Currency; 
import java.util.Locale; 

public class CurrencyFormat 
{ 
    public void displayCurrencySymbols() 
    { 
    Currency currency = Currency.getInstance(Locale.US); 
    System.out.println("United States: " + currency.getSymbol(Locale.US)); 
    } 
    public static void main(String[] args) 
    { 
    new CurrencyFormat().displayCurrencySymbols(); 
    } 
} 
+0

Funktioniert nicht für andere Währungen. Z.B. es wird "COP" für kolumbianischen Peso statt "$" angezeigt –

Verwandte Themen