.NET C# Java Javascript Exception

 | 
Frage stellen Fragen Themen Mitglieder Abzeichen RSS-Feed
2
Moinsen,

Ich muss aus C# für alle im System vorhandenen CultureInfo Objekte die Währungsformate exportieren. Es ist auch grundsätzlich kein Problem alle Cultures durchzugehen und die NumberFormatInfo Objekte zu bekommen.

Aber: Ich kann darauf dann zwar ein beliebige Zahl als Währung formatieren, komme aber nicht an den eigentlichen Format-String heran.

Zum Beispiel liefert folgender Code "1,00 €":
CultureInfo ci = new CultureInfoI("de-DE");
string.Format(ci.NumberFormat, "{0:C}", 1);

Wie komme ich an das Format, welches durch 'C' ausgedrückt wird (#.###,## €)?
29.01.10
DaSpors 2,0k 7
Kommentieren - Für Rückfragen oder Anmerkungen
Was genau willst du denn erreichen? Das alle Cltures in einem anderen Format dargestellt werden oder willst du nur 1 spezielles (z.B. de-DE) abändern?
Scout 29.01.10
Ich möchte den Format-String, den C# intern verwendet im eine Zahl als Währung zu formatieren.
DaSpors 30.01.10
Genauer: Ich will die Währungsformate aller Cultures als strings exportieren.
DaSpors 30.01.10
3 Antworten
3
Da Edit nicht funktioniert mach ich mal eine neue Antwort auf...

Also wenn ich dich richtig verstehe, möchtest du die Vorschrift haben, wie für jedes Land das Ergebnis gebildet wird - zum Bsp. beim Standard Formatbezeichner "C".

Doch so eine Vorschrift ist meines Wissens nicht direkt abrufbar! Die Informationen sind alle im NumberFormatInfo-Objekt hinterlegt und daraus wird zur Laufzeit der Result-String zusammengebaut.

Beispiel: Der Tausendertrenner und die TausenderGruppe sind im NumerFormatInfo angegeben. Damit kann dann das Ergebnis entsprechend formatiert werden. Ist eine Gruppe von 3 Ziffern und ein Trenner="." angegeben, wird alle 3 Stellen ein "." hinzugefügt.

Um deine Vorschrift zu erhalten müsstest du also den .NET Framework Quelltext analysieren und die einzelnen Schritte bis der Result-String fertig ist aufschreiben.

Grüßle
01.02.10
Scout 1,4k 1 7
1
Edit: lt. MSDN gibt CurrencyNegativPattern (Werte 0-15) die Position des Wärungssymbols wieder (siehe http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencynegativepattern%28VS.71%29.aspx) Für CurencyPosityPattern sind nur Werte 0-3 erlaubt. Grüßle
Scout 01.02.10
Dankeschönstens! Genau das hab ich gesucht!!!11elf
DaSpors 02.02.10
Also Deinen Kommentar mein ich :)
DaSpors 02.02.10
1
Also soweit ich weiß gibst du mit "{0:C}" vor, dass du den Standard verwenden möchtest. Ob man diesen ändern kann, kann ich so atock nicht sagen. Allerdings kannst du genau an dieser Stelle deinen eigenen "Custom Format String" angeben (siehe http://msdn.microsoft.com/en-us/library/0c899ak8.aspx).

Das sieht dann zum Bsp. so aus:
CultureInfo ci = new CultureInfo("de-DE");
string.Format(ci.NumberFormat,"{0:00.00}", 1);
// Ausgabe 01.00


Grüßle
29.01.10
Scout 1,4k 1 7
Hilft leider nicht, weil ich brauche das quasi umgekehrt: Ich will den Format-String haben, den C# für {0:C} einsetzt.
DaSpors 30.01.10
1
Wenn du die Zusammensetzung der internen Zeichenfolge aufdrößeln willst, sind die NumberFormatInfo Eigenschaften deine gesuchten Freunde.
Hier kannst du vom CurrencySymbol über den CurrencyDecimalSeparator bis zu den CurrencyDecimalDigits alles erfahren.
Hoffe das war es, was du suchtest.

Servus,
Klaus
01.02.10
klaus_b 1,4k 1 5
Leider auch nicht, weil ich dann immer noch nicht weiss, WIE diese Properties zusammengefügt werden, also ob z.B. das Symbol hinten oder vorne steht.
DaSpors 01.02.10
1
Dann frage doch die Eigenschaft CurrencyPositivPattern. Bei Rüchgabe 0 oder 2 steht das Symbol hinten, bei 1 oder 3 seben vorne.
klaus_b 01.02.10
Jop, das mach ich jetzt auch ;) Danke
DaSpors 02.02.10
Deine Antwort
Entweder einloggen... ...oder ohne Wartezeit registrieren
Name
Passwort
Passwort wiederholen
E-Mail
Geworben von


Login mit OpenID

Mit einem OpenID-Account kannst Du dich auf allen Webseiten anmelden, die OpenID unterstützen. Du hast bereits ein Benutzerkonto bei einem der folgenden Provider? Dann kannst Du dich direkt hier damit registrieren.


OpenID-Provider anklicken: