2010-02-23 11 views
8

Mam problem z przesłonięciem decimal.ToString("C"). Zasadniczo co chce zrobić to w następujący sposób:Symbol waluty niestandardowej i miejsca dziesiętne za pomocą decimal.ToString ("C") i CultureInfo

CultureInfo usCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = usCulture; 

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

ja chce, aby powyższy kod do (ToString override ("C")) funkcja przy czym gdy następujący kod zostanie wykonany:

decimal paid = Convert.ToDecimal(dr["TotalPaids"]); 
lblPaids.Text = paid.ToString("C"); 

wyniki byłyby RM4,900.00 zamiast $ 4,900.00

Jak mogę utworzyć nadpisanie dla decimal.ToString("C") która rozwiąże mój problem

Z góry dzięki.

+2

jakaś szansa można edytować tytuł będzie bardziej opisowy? "decimal.ToString (" C ")" nie oznacza tego, o co prosisz, więc gdy pojawia się w Google, nie jest jasne, o co chodzi w tym pytaniu. –

+1

@SteveHiner co powiesz o tytule? – Korayem

+1

@Korayem: Znacznie lepiej. :-) –

Odpowiedz

16

Aby uzyskać formatu jak RM 11,123,456.00 trzeba także ustawić następujące właściwości

CurrentCulture modified = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name); 
Thread.CurrentThread.CurrentCulture = modified; 
var numberFormat = modified.NumberFormat; 
numberFormat.CurrencySymbol = "RM"; 
numberFormat.CurrencyDecimalDigits = 2; 
numberFormat.CurrencyDecimalSeparator = "."; 
numberFormat.CurrencyGroupSeparator = ","; 

Jeśli tak że przy starcie aplikacji następnie to powinno dawać format MS-MY jak en-US, ale z symbolem waluty RM za każdym razem, gdy wywołujesz metodę ToString("C").

+0

Dzięki Mike. My CultureInfo to ms-MY. Ale w celu wyświetlenia wartości waluty, muszę użyć en-US, ponieważ wyświetla się poprawnie. E.g ms-MY = R11.747.435 i en-US = RM1 774 435.00. Czy istnieje jakakolwiek inna metoda, nadpisanie metody ToString ("C"). Czy możesz mi pomóc z tym. –

+0

@Agamand The True - Możesz albo zawsze wywoływać 'ToString (" C ", LocalFormat)' Lub zmienić niektóre z innych właściwości aktualnych kultur NumberFormatInfo. Wygląda na to, że chcesz zmienić separator i liczbę miejsc dziesiętnych. Będę edytować odpowiedź, aby to uwzględnić. –

+0

Dzięki Mike, to jest idealne. Ale kiedy umieściłem to w Global.asax, metoda Application_Start.Otrzymuję ten błąd "System.Globalization.CultureInfo" nie zawiera definicji dla "NumberFormatInfo" i nie można znaleźć metody rozszerzenia "NumberFormatInfo" akceptującej pierwszy argument typu "System.Globalization.CultureInfo" (czy brakuje za pomocą dyrektywy lub odwołania do zespołu?) Zaimportowałem już System.Globalization. Jak mogę to rozwiązać ... –

2

wykorzystanie ten format string:

#,##0.00 $;#,##0.00'- $';0 $ 
decimal paid = Convert.ToDecimal(dr["TotalPaids"]); 
lblPaids.Text = paid.ToString("#,##0.00 $;#,##0.00'- $';0 $"); 
+2

Bojuiing (głowa odpada) – demoncodemonkey

6

Jeśli dobrze rozumiem pytanie, co chcesz to zastąpić $ z RM. Jeśli tak, to trzeba przejść format niestandardowy ...

lblPaids.Text = paid.ToString("C", LocalFormat); 
+0

Tq dla odpowiedzi, ale lokalna informacja kulturowa jest (ms-MY). Ponieważ używam systemu Windows XP, znakiem waluty dla tej kultury jest R, a nie RM, który jest prawidłowym znakiem. –

+0

Cóż, musisz zmienić wartość, którą ustawiasz: LocalFormat.CurrencySymbol = "R"; – Jonathan

-1
lblPaids.Text = paid.ToString("C",usCulture.Name); 

Albo

lblPaids.Text = paid.ToString("C",LocalFormat.Name); 

musi pracować

2

można użyć metody Double.ToString (String, IFormatProvider) https://msdn.microsoft.com/en-us/library/d8ztz0sa(v=vs.110).aspx

double amount = 1234.95; 

amount.ToString("C") // whatever the executing computer thinks is the right fomat 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie")) // €1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es")) // 1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB")) // £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au")) // $1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us")) // $1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca")) // $1,234.95 
Powiązane problemy