2012-06-20 8 views
7

Ho un'applicazione in cui desidero formattare una valuta utilizzando la formattazione della valuta nativa del Paese. Il problema è che alcuni paesi utilizzano più valute, ma .NET assegna solo una valuta per paese. Ad esempio, Romania utilizza EUR e RON. Quando ricevo informazioni valuta dal .NET:Come si gestiscono i paesi che utilizzano più valute in .NET?

var cultureInfo = new CultureInfo("ro-RO"); 
Console.WriteLine("cultureInfo.NumberFormat.CurrencySymbol); 

L'uscita è leu, che è il tipo di valuta RON.

Come ottengo l'EUR per questo caso in .NET? Ho il codice di valuta ISO di 3 lettere (EUR) e la lingua del paese (ro-RO) ma non so come utilizzare queste informazioni per ottenere una stringa di valuta dell'euro correttamente formattata.

+2

Romania non è tra i paesi che utilizzano EURO ancora. .NET sta visualizzando correttamente la valuta. Non confondere gli Stati membri dell'UE con gli stati dell'UE usando la valuta EURO, non è la stessa cosa. Queste liste non sono uguali al 100%, perché molti paesi non usano ancora l'EURO (ad esempio la Gran Bretagna). – walther

+0

È vero, ma sosteniamo i pagamenti in EUR in Romania e nel Regno Unito, ad esempio. Sebbene possano non essere "standardizzati" dal paese, in pratica vengono utilizzati e quindi dobbiamo sostenerli. –

+0

Immagino che se non è "standardizzato" allora .net non ha modo di saperlo. (Questo a meno che non lo si codi esplicitamente) –

risposta

1

È possibile sostituire simbolo di valuta con uno personalizzato (leu a euro in questo caso)

NumberFormatInfo LocalFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); 
LocalFormat.CurrencySymbol = "€"; 

decimal money = 100; 
Console.WriteLine(money.ToString("c", LocalFormat)); 
0

ho pensato di darvi una classe di supporto risposta statico come segue:

static class CurrencySymbolHelper 
{ 
    public static string GetCurrencySymbol(CultureInfo cultureInfo, bool getAlternate) 
    { 
     if (cultureInfo.Name == "ro-RO" && getAlternate) 
       return "EUR"; 

     return cultureInfo.NumberFormat.CurrencySymbol; 
    } 
} 

Puoi passare qualsiasi variabile che vuoi nel metodo e fare tutte le operazioni che desideri. Chiamata come segue:

var cultureInfo = new CultureInfo("ro-RO"); 
Console.WriteLine(CurrencySymbolHelper.GetCurrencySymbol(cultureInfo,false)); 

problema è, si deve chiamare questo helper quando mai si desidera ottenere informazioni di valuta invece di cultureInfo.NumberFormat.CurrencySymbol

Problemi correlati