C# .Net Get Number Format by Currency

Murphy9904

Lt. Junior Grade
Registriert
Mai 2007
Beiträge
344
Hi,
ich hab den Iso code als String von der Currency also sowas wie "EUR" oder "GBP" und so

jetzt will ich das korrekt anzeigen mit dem Jeweiligen Symbol.
also 5€ oder £5

am ende muss das mit allen Währungen funktionieren.
wie kann ich das am besten machen?
ich hab bisher noch keine vernünftige Lösung gefunden.

Danke schonmal :)

Murphy
 
Auf die Schnelle zB:
du baust ein Interface CurrencyRenderer mit einer Funktion render(int value) mit einem String als Rückgabe. Davon leitest du Implementierungen z.B. für Euro, Pfund etc. ab.
- Der EuroCurrencyRenderer macht in render einen String aus dem übergebenen Wert und hängt das €-Zeichen an
- Der PoundSterlingCurrencyRenderer macht in render einen String, schreibt "£" rein und hängt den Betrag an
etc.

Dann legst du ne map an, die für diese 3-buchstabige Repräsentation jeder benötigten Währung auf einen CurrencyRenderer abbildet, also zB map.get("EUR") liefert einen EuroCurrencyRenderer

das ist aber off the top of my head ;)
 
:O
das heist ich muss für JEDE Währung mir so ein ding schrieben?
dass muss doch einfacher gehen

weil String.Format(NumberFormat , "{0:c}" , 1,5m); würds ja auch tun, nur dass ich keinen numberFormat habe an der Stelle..


Murphy
 
Spontan würde mir dazu einfallen das ganze über eine Ressource Datei zu lösen.
Als Variablenname den ISO Code und als String das entsprechende Währungszeichen.

Das ganze dann mit der Zahl und dem entsprechenden Zeichen ausgeben.
 
gibts da nicht irgendwas von .NET was man verwenden kann?

auserdem muss ich ja auch wissen ob das Zeichen vor oder nach der Zahl kommt.
 
das hilft ja nicht wenn das zeichen manchmal vorne und manchmal hinten steht. da aber annehme dass die varianten ziemlich begrenzt sind, geht vermutlich auch was einfacheres, wie ein flag ob das zeichen hinten oder vorne hin muss und eine beliebige form der abbildung von iso string auf das währungszeichen

ich bin mit den funktionen für numbeformats etc halt nicht vertraut, erst recht nicht in c#, das was ich da oben geschrieben hab war ein genereller ansatz ;)

edit: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx der erste teil des beispielkastens rechts sieht aus als könnte es hilfreich sein, würde aber immernoch eine abbildung von deinem iso-string auf das dort verwendete format benötigen
 
Zuletzt bearbeitet:
also im prinzip brauche ich nur die CultureInfo anhand der Währung
das kann ich dann in mein String.Format reinschmeissen..

aber wie bekomme ich die CultureInfo
 
Leg dir ein Dictionary an oder so, in der alle Cultures drinstehen und wähle dann entsprechend aus.
 
nochmal zum verständniss
ich habe verschiedene Werte --> alle inklusive der Information "EUR" , "PLN" , "GBP" usw... (ganz viele verschiedene)
und ich möchte in der Oberfläche diese mit dem richtigen Währungszeichen anzeigen
 
Dann musst du dir einen Konverter schreiben, der anhand der übergebenen Daten das Zeichen festlegt. Dafür kannst du im Konverter IValueConverter implementieren.
Dann kannst du das z.b. in WPF einbinden und es geht immer automatisch.
 
Gut klar :)

jetzt nurnoch mein Problem: wie bekomme ich die Culture anhand der Währung?
 
Die Culture brauchst du dann nicht. Irgendwo musst du ja eh einmal festlegen welche Zeichenfolgen (EUR, PLN, usw.) es gibt, z.B. ein einem Dictionary. In der Convert-Methode guckst du dann, ob der übergene Value eines der im Dictionary angegeben Währungszeichenfolgen enthält und ersetzt diesen dann entsprechend.
 
das währen dann 174 Währungen
das kann ich doch nicht hardcoden :O
 
Dann evlt über eine XML-Datei (vorhandene) reinladen. Irgendwoher musst das Programm ja wissen, welche Währungszeichenfolge zu welchem Währungszeichen gehört... Aber sowas gibts doch bestimmt auch irgendwo schon im Internet, bist ja nich der erste mit dieser Problematik :-)
 
Ja das würde gehn

hab grad herrausgefunden dass in der RegionInfo die man über die CultureInfo bekommen kann dieser Iso 4217 Coder (dieser Währungscode) steht

So komm ich dann zu meiner Culture info:
Code:
     public static NumberFormatInfo NumberFormatByCurrency(string ISOCurrency)
        {
            foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures))
            {
                if (!ci.IsNeutralCulture)
                {
                    try
                    {
                        RegionInfo ri = new RegionInfo(ci.LCID);
                        if (ri.ISOCurrencySymbol == ISOCurrency)
                        {
                            return ci.NumberFormat;
                        }
                    }
                    catch (Exception) { }

                }
            }
            return null;
        }

Aber danke euch allen Trotzdem!
 
Zuletzt bearbeitet:
Zurück
Oben