2011-01-30 15 views
33

Czy istnieje biblioteka do sformatowania prawidłowej waluty dla kraju?Format waluty do wyświetlenia

Przykład UK - 127,54 £ Holandia € 127,54- USA $ 127,54

etc ..

Niektóre rzeczy do rozważenia,

  1. Waluta Symbol

  2. Umieszczanie symboli walutowych - może być być albo pla ce przed lub po cyfrach .

  3. wyświetlacz ujemnej ilość

Odpowiedz

59

Spróbuj Currency Format Specifier ("C"). Automatycznie uwzględnia aktualną kulturę interfejsu użytkownika i odpowiednio wyświetla wartości walut. Można używać go z String.Format lub przeciążoną metodą ToString dla typu liczbowego

Na przykład:

double value = 12345.6789; 
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)); 

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)); 

Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK"))); 

// The example displays the following output on a system whose 
// current culture is English (United States): 
//  $12,345.68 
//  $12,345.679 
//  kr 12.345,679 
+0

Jedna mała uwaga dla przyszłych czytelników, dziesiętne są preferowanym rodzajem na wartości waluty. Zobacz tę odpowiedź od Zneaka po więcej szczegółów: https://stackoverflow.com/a/3730040/2573109 –

21

Taka funkcjonalność jest wbudowana w

Używanie dziesiętny można użyć format string "C" lub "C"..

decimal dec = 123.00M; 
string uk = dec.ToString("C", new CultureInfo("en-GB"); // uk holds "£123.00" 
string us = dec.ToString("C", new CultureInfo("en-US"); // us holds "$123.00" 
+2

Pomyśl, że brakuje ci zamkniętego nawiasu na liniach 2 i 3. –

2

Ten Code (zestawy waluty GB (Britain/UK/Anglia/PLN), a następnie drukuje linię Następnie ustawia walutę USA/$ i drukuje linię)

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false);   
Console.WriteLine("bbbbbbb {0:c}",4321.2); 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false); 
Console.WriteLine("bbbbbbb {0:c}",4321.2); 

Will Ekran-

bbbbbbb £4,321.20 
bbbbbbb $4,321.20 

Lista nazw kultur, np. en-GB en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

4

Problem z podjęciem określonej liczby i wyświetla go z .ToString („C”, kultura) jest to, że skutecznie zmienia kwotę walucie danej kultury. Jeśli masz określoną kwotę, kod waluty ISO o tej wartości i chcesz wyświetlić go dla danej kultury, poleciłbym po prostu utworzenie metody dziesiętnej, takiej jak poniższa. To nie będzie automatycznie zakładać, że waluta jest w walucie kultury:

public static string ToFormattedCurrencyString(
    this decimal currencyAmount, 
    string isoCurrencyCode, 
CultureInfo userCulture) 
{ 
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol; 

    if (userCurrencyCode == isoCurrencyCode) 
    { 
     return currencyAmount.ToString("C", userCulture); 
    } 

    return string.Format(
     "{0} {1}", 
     isoCurrencyCode, 
     currencyAmount.ToString("N2", userCulture)); 
} 

to będzie użyć lokalnej symbol waluty lub kod ISO waluty z wysokości - w zależności od tego jest bardziej odpowiednie.Więcej na temat in this blog post.

-2
public static string ToFormattedCurrencyString(
    this decimal currencyAmount, 
    string isoCurrencyCode, 
    CultureInfo userCulture) 
{ 
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol; 

if (userCurrencyCode == isoCurrencyCode) 
{ 
    return currencyAmount.ToString("C", userCulture); 
} 

return string.Format(
    "{0} {1}", 
    isoCurrencyCode, 
    currencyAmount.ToString("N2", userCulture)); 

}

+2

Dokładnie tak samo, jak odpowiedź @ jakejgordon z 2 lat wcześniej. – kristianp

Powiązane problemy