von Currency und Symbols

  • Themenstarter Themenstarter Takidoso_incognito
  • Beginndatum Beginndatum
T

Takidoso_incognito

Hallo und halli,
(Vorweg: leider wird mir hier die Anmeldung verwehrt, offenbar ist die neue Seite nicht mehr mit älteren IE-Versionen, kompatibel)
Nun aber zum Thema...
ich versuche z.Z. was ganz einfaches, was mir nicht gelingen mag: ich möchte einer CurrencyInstance von NumberFormat eine andere Währung beizubringen, so dass mir das tatsächliche Währungssymbol dargestellt wird.
habe auch dann mal gegoogelt, und fand die Seite
http://www.tutego.de/blog/javainsel/2009/11/numberformat-wahrungen-angeben-und-die-klasse-currency/
die mir zwar ein nettes Beispiel gibt, welches ich unabhängig davon genauso auch gemacht habe, aber ach dort scheint man nicht davon auszugehen (traut man dem kleinen Kommentar) dass ein Währungssymbol angezeigt, sondern stattdessen nur der dreistellige ISO-Währungscode.

Mein Ansatz ist also der folgende:
Java:
NumberFormat  dezForm = NumberFormat.getNumberInstance(Locale.GERMAN);
String        st1     = "12345,45"
Currency      cur1    = Currency.getInstance("USD");
NumberFormat curForm1 = NumberFormat.getCurrencyInstance(); 
curForm1.setCurrency(cur1);

st1 = curForm1.format(dezForm.parse(st1));

System.out.println(x+".'"+st1+"'"+"   '"+cur1.getSymbol()+"'");

In anderen Worten, ich möchte Deutsches Zahlenformat mit einem anderen Währungssymbol, bekomme aber anstelle des Währungssymbols den dreistelligen Währungscode in oben konstruierten Fall wäre das also
Code:
12.345,45 PLN'   'USD'
Wie muss ich es richtig machen? Und warum geht dieser Ansatz eigentlich nicht? Liegt das am vorgegebenen Deutschen Local? (wäre so mein Verdacht)

Ach ja ich verwende Java 5
 
Über die Currency Instanz direkt wird es warscheinlich nicht funktionieren, da sowohl getSymbol() als auch getCurrencyCode() in deinem Fall "USD" zurückliefern.
Eine Möglichkeit wäre das ganze eventuell voneinander zu trennen, also erst den formatierten Betrag ohne "USD" auszugeben und im Anschluss dann noch das fehlende "$" einfach anzuhängen

Hier mal ein Beispiel wie man an die Währungssymbole kommen kann:
Java:
import java.text.DecimalFormat;
import java.util.Locale;

public class CurrencyTest {

	public CurrencyTest() {
		for (Locale locale : Locale.getAvailableLocales()) {
			if (locale.getDisplayCountry().length() > 0) {
				System.out.println(locale.getDisplayCountry() + " ("
						+ locale.getCountry() + ") -> "
						+ getCurrencySymbol(locale));
			}
		}
	}

	public String getCurrencySymbol(Locale locale) {
		DecimalFormat nf = (DecimalFormat) DecimalFormat
				.getCurrencyInstance(locale);
		return nf.getDecimalFormatSymbols().getCurrencySymbol();
	}

	public static void main(String[] args) {
		new CurrencyTest();
	}

}
Falls jemand einen einfacheren Weg kennt bitte bescheid geben^^
 
Zuletzt bearbeitet:
Naja ist ja ein netter Vorschlag, aber irgendwie habe ich nunmal nicht die locals sondern nur die Währungscodes zur Verfügung. Mir erscheint das irgendwie unschön bzw. als Fehler von der Currency-Klasse, da ich normalerweise von einer Mehtode getInstance(String currencyCode) und anschliessendender Abfrage des Symbols dieser Instance tatsächlich das richtige Symbol erwartet hätte und nicht nur ein Echo des Currency-Codes :(.
 
Zuletzt bearbeitet:
Hallo,

Naja ist ja ein netter Vorschlag, aber irgendwie habe ich nunmal nicht die locals sondern nur die Währungscodes zur Verfügung. Mir erscheint das irgendwie unschön bzw. als Fehler von der Currency-Klasse, da ich normalerweise von einer Mehtode getInstance(String currencyCode) und anschliessendender Abfrage des Symbols dieser Instance tatsächlich das richtige Symbol erwartet hätte und nicht nur ein Echo des Currency-Codes .
Ich glaube das ist kein Fehler der Currency Klasse. Die Darstellung des Währungssymbols einer anderen Währung ist eben auch länderabhängig, so stehts auch in der Dokumentation. Du kannst dir natürlich nun damit behelfen für jede Währung die du unterstützen willst ein Land (Locale) festzulegen, dessen CurrencySymbol-Darstellung du verwenden möchtest.

Gruß Tom
 
Hallo Tom,
ist ein interessanter Aspekt, dass ein Länderkürzel eines Landes in einer anderen "Landes-Sprache" (Locale) anders dargestellt sein kann. Schade nur, dass selbst dies dann nicht passiert, denn in Deutschland verwendet man z.B. auch $ für US-Dollar. Also irgendwie hätte ich mir da doch mehr von der Routine versprochen, zumal schaut man sich den Code oberflächlich an, hätte man für eine reine Rückgabe des Whrungscodes doch nicht so viel programmieren müssen :D
Also scheint irgendetwas vorgesehen zu sein, was offenbar nciht Voreinstellmäßig vorliegt, so mein Schluß.
Müsste man demnach die anderen Währungssymbole der anderen Länder in einer Schleife dem einen Local, welches man gerade verwenden will, selbst eintrichtern, damit es so funktiniert, wie ich es annahm. :-/
Schon irgendwie komisch, oder?
Vermutlich ist es dann einfacher, man macht sich eine eigene Map mit Key des Währungscodes und dem Symbol, was man sich dann über Locale.getAvailableLocales() ermittelt.
Aber Danke für die Antworten.
Takidoso
 
Zurück