2012-06-20 41 views
7

Tôi có một ứng dụng mà tôi muốn định dạng đơn vị tiền tệ bằng cách sử dụng định dạng đơn vị tiền tệ gốc của quốc gia. Vấn đề là, một số quốc gia nhất định sử dụng nhiều loại tiền tệ, nhưng .NET chỉ gán một loại tiền tệ cho mỗi quốc gia. Ví dụ: Romania sử dụng EURRON. Khi tôi nhận được thông tin tiền tệ từ NET:Tôi làm cách nào để xử lý các quốc gia sử dụng nhiều loại tiền tệ trong .NET?

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

Đầu ra là leu, đó là RON loại tiền tệ.

Làm cách nào để nhận EUR cho trường hợp này trong .NET? Tôi có mã tiền tệ ISO gồm 3 chữ cái (EUR) và ngôn ngữ quốc gia (ro-RO) nhưng tôi không biết cách sử dụng thông tin này để nhận chuỗi tiền tệ được định dạng chính xác.

+2

Romania không nằm trong số các nước sử dụng EURO được nêu ra. .NET hiển thị đúng loại tiền tệ. Đừng nhầm lẫn các quốc gia thành viên EU với các quốc gia EU sử dụng đồng EURO, nó không giống nhau. Các danh sách đó không bằng 100%, bởi vì nhiều quốc gia vẫn không sử dụng EURO (ví dụ như Vương quốc Anh). – walther

+0

Đúng, nhưng chúng tôi hỗ trợ thanh toán EUR ở Romania và Vương quốc Anh, chẳng hạn. Mặc dù họ có thể không được 'chuẩn hóa' bởi quốc gia, trong thực tế chúng được sử dụng và do đó chúng tôi phải hỗ trợ họ. –

+0

Tôi đoán rằng nếu nó không được 'chuẩn hóa' thì .net không có cách nào để biết về nó. (Đó là trừ khi bạn mã nó một cách rõ ràng) –

Trả lời

1

Bạn có thể thay thế ký hiệu tiền tệ với một tùy chỉnh (leu để đồng euro trong trường hợp này)

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

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

tôi nghĩ rằng tôi muốn cung cấp cho bạn một lớp helper câu trả lời tĩnh như sau:

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

     return cultureInfo.NumberFormat.CurrencySymbol; 
    } 
} 

Bạn có thể vượt qua những gì bao giờ biến bạn muốn vào phương pháp và làm bất kỳ hoạt động trong đó bạn muốn. Gọi như sau:

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

Issue là, bạn phải gọi helper này khi đã bao giờ bạn muốn nhận được thông tin tiền tệ thay vì cultureInfo.NumberFormat.CurrencySymbol

Các vấn đề liên quan