2009-07-17 16 views
8

w języku C#, Mam podwójną zmienną cenę o wartości 10215.24. Chcę pokazać cenę za pomocą przecinka po kilku cyfrach. My spodziewać wyjście jest 10,215.24C#: Formatowanie łańcucha wartości ceny

+2

Odpowiedzi, które zasugerowałeś .ToString ("N") są dobre. Po prostu chcę zauważyć, że wynik będzie zależał od aktualnej informacji CultureInfo; To coś dobrego. W moim systemie (szwedzki język) wypisuje "10 215,24", co ma dla mnie sens, ponieważ "10 2115.24" ma dla ciebie sens. Pamiętaj, że możesz napotkać kłopoty, jeśli spróbujesz przetworzyć ten ciąg * z powrotem na DateTime *. –

+0

@Fredrik: Dlaczego miałby sparsować go ponownie do * DateTime *? –

+0

Jego mózg prawdopodobnie przełączył narzędzia w połowie zdania: p – Svish

Odpowiedz

26
myPrice.ToString("N2"); 

w zależności od tego, co chcesz, możesz też zostać wyświetlony symbol waluta:

myPrice.ToString("C2"); 

(numer znajdujący się po C lub N wskazuje ile dziesiętne powinny być używane). (C formatuje liczbę jako ciąg waluty, który zawiera symbol waluty)

Aby być całkowicie poprawnym politycznie, można również określić CultureInfo, które należy zastosować.

+1

Myślę, że "N2" jest tym, za czym są. –

+0

Czy jednak nie jest to typ domyślny? Abyś potrzebował tylko 'myPrice.ToString (" N ")'?Nieważne, po prostu ciekawy: p – Svish

+0

C2 jest niepoprawny, ponieważ wyświetla walutę –

15

myślę, że powinien to zrobić:

String.Format("{0:C}", doubleVar); 

Jeśli nie chcesz, aby symbol waluty, a potem po prostu to zrobić:

String.Format("{0:N2}", doubleVar); 
+0

Nie sądzę, że chcieli symbol waluty. –

+1

ta odpowiedź jest na miejscu. Jednak warto również zapoznać się z http://msdn.microsoft.com/en-us/library/fht0f5be.aspx dla różnych innych formatów. – James

4

Look, a konkretnie do format strings "Kukurydza".

double price = 1234.25; 
string FormattedPrice = price.ToString("N"); // 1,234.25 
6

Na marginesie, polecam zajrzeć do typu dziesiętnego dla waluty. Pozwala uniknąć błędów zaokrąglania, które plaga unosi, ale w odróżnieniu od liczby całkowitej może zawierać cyfry po przecinku dziesiętnym.

+0

Rzeczywiście. Dziesiętne ułamki powinny być używane do rzeczy, w których liczy się precyzja. –

+1

W niektórych aplikacjach finansowych używanie pływaków jest nielegalne, ponieważ wszystkie zaokrąglenia muszą być wykonywane w określony sposób. Alternatywą, w której klasa typu Decimal lub BigNumbers jest niedostępna, jest użycie liczb całkowitych do przechowywania ułamków jednostki walutowej. Tak więc, na przykład, moglibyśmy liczyć pensy lub ich frakcje. –

+0

Czy to prawda, że ​​błędy zmiennoprzecinkowe są odizolowane od układów i kompatybilnych układów Intela? –

1

To może pomóc

String.Format("{#,##0.00}", 1243.50); // Outputs “1,243.50″ 

    String.Format("{0:$#,##0.00;($#,##0.00);Zero}", 1243.50); // Outputs “$1,243.50″ 

    String.Format("{0:$#,##0.00;($#,##0.00);Zero}", -1243.50); // Outputs “($1,243.50)″ 

    String.Format("{0:$#,##0.00;($#,##0.00);Zero}", 0); // Outputs “Zero″ 
0

Ten chcesz to "N2".

Oto przykład:

double dPrice = 29.999988887777666655554444333322221111; 
string sPrice = "£" + dPrice.ToString("N2"); 

może nawet tak:

string sPrice = ""; 

if(dPrice < 1) 
{ 
    sPrice = ((int)(dPrice * 100)) + "p"; 

} else 
{ 
    sPrice = "£" + dPrice.ToString("N2"); 

} 

która skrapla się ładnie do tego:

string sPrice = dPrice < 1 ? ((int)(dPrice * 100)).ToString("N0") + "p" : "£" + dPrice.ToString("N2"); 

Dalsza lektura na msdn.microsoft.com/en-us/library/fht0f5be.aspx różnych innych rodzajów formatowania

Powiązane problemy