2012-04-25 19 views
5

mam następujący wiersz:Dlaczego ten format ciągu nie jest walutą?

//Send Email 
clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", strOrderTotal + "\n"); 

Zegarek wyświetla:

String.Format("{0:C}", strOrderTotal + "\n") "35\n" string 

Ale to tylko Wyjścia "35". Spodziewałem się "35,00 dolarów". Dlaczego to nie działa zgodnie z przeznaczeniem?

Dzięki

+5

Ponieważ formatujesz ciąg znaków. Nawet jeśli 'strOrderTotal' ma wartość' decimal', twoje '+" \ n "' zmusza je do 'string'. – dasblinkenlight

+0

Tak, wszystko było w porządku. Dzięki wielkie! – Kolten

Odpowiedz

8

Zgaduję, że strOrderTotal jest ciągiem znaków? Myślę, że {0:C} działa tylko dla typów dziesiętnych lub typu int.

2

nie wykazały deklaracji strOrderTotal ale przez jego nazwę I zakładając, że już string. Ponieważ jest to już ciąg znaków, formatowanie nie działa.

Jeśli chcesz, aby formatowanie działało, musisz podać sumę zamówienia jako liczbę - najlepiej decimal.

2

Ponieważ jest to ciąg.

Próba sformatowania ciągu zwraca ... ciąg znaków.

Potrzebujesz wartości liczbowej, aby sformatować ją jako walutę.

Zobaczysz, że specyfikator formatu C jest zdefiniowany na stronie MSDN na stronie Standard Numeric Format String. Numeryczne, a nie "struny".

2

Zakładam, że strOrderTotal jest ciągiem? Musiał być dziesiętny lub podwójny itd.

2

Zamierzam założyć, że strOrderTotal jest ciągiem znaków. Powinieneś użyć typu liczbowego, np. Podwójnego lub dziesiętnego.

2

Wygląda (na podstawie nazwy zmiennej strOrderTotal), że suma jest już ciągiem. Specyfikator formatu "C" konwertuje liczbę na format waluty, a nie na coś, co jest już ciągiem znaków.

Dlatego należy albo ręcznie sformatować ciąg znaków jako walutę, albo zastosować format waluty, gdy suma zamówienia jest oryginalnie przekonwertowana na ciąg znaków (gdy jest przechowywany w strOrderTotal).

1

Jeśli strOrderTotal jest ciągiem znaków można użyć tego kodu, aby go sformatować dla waluty

clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", decimal.Parse(strOrderTotal) + "\n"); 
+0

Nie. Nie można przekonwertować ciągu znaków na liczbę dziesiętną za pomocą rzutowania. –

+0

'decimal.Parse (string)' zadziała, ale rzutowanie dziesiętnej na ciąg nie będzie. – SouthShoreAK

5

nie mogę uwierzyć wszystkich tych odpowiedzi i nikt nie wspomniał o tym, aby zmienić swój kod

clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", strOrderTotal) + "\n"; 

i zobaczyć, czy to rozwiąże problem, jednak lepszy sposób to zrobić byłoby

clntMailBody = String.Format("{0}Order Total: {1:C}\n", clntMailBody, strOrderTotal); 

jest znacznie łatwiej zobaczyć, co się dzieje i usuwa wiele twoich konkatenacji ciągów.

Jeżeli jesteś gotów zrobić kilka ponowne napisanie nawet lepszym rozwiązaniem jest: (zrobiłem jakąś logikę się pokazać mój przykład)

StringBuilder clntMailBody = new StringBuilder(); 

clntMailBody.AppendLine("Some Fixed body Text") 

foreach(string lineItem in Invoice) 
{ 
    clntMailBody.AppendLine(lineItem); 
} 

clntMailBody.AppendFormat("Order Total {0:C}", strOrderTotal).AppendLine(); 

return clntMailBody.ToString(); 
0

Aby wyświetlić łańcuch znaków w formacie walutowym:

StringBuilder sb= new StringBuilder("Your total amount is "); 
sb.AppendFormat("{0:C} ", 25); 
Console.WriteLine(sb); 

wyjściowa:

Twoja całkowita kwota wynosi $ w wysokości 25,00

Powiązane problemy