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 (#.###,## €)?
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.
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
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
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.