2012-04-25 59 views
5

我有以下行:爲什麼這個字符串格式不是貨幣?

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

觀察表明:

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

但它只輸出 「35」。我預計「35.00美元」爲什麼這不按預期工作?

感謝

+5

因爲你正在格式化一個字符串。即使'strOrderTotal'是'decimal',你的'+「\ n」'強制它成爲'string'。 – dasblinkenlight 2012-04-25 21:03:55

+0

是的,你們都是對的。非常感謝! – Kolten 2012-04-25 21:12:51

回答

8

我猜strOrderTotal是一個字符串?我認爲{0:C}只適用於小數或整數類型。

2

您還沒有表現出的strOrderTotal的聲明,但是通過它的名字,我假設它已經是一個string。由於它已經是一個字符串,格式不起作用。

如果您希望格式化起作用,您需要將訂單總數作爲數字傳遞 - 最好是decimal

2

因爲它是一個字符串。

嘗試格式化字符串返回...字符串。

您需要一個數值才能將其格式化爲貨幣。

您將看到C格式說明符在MSDN的Standard Numeric Format String頁面中定義。數字,而不是「字符串」。

2

我認爲strOrderTotal是字符串?它必須是小數或雙等

2

我打算假設strOrderTotal是一個字符串。您應該使用數字類型,如double或Decimal。

2

它看起來像(根據變量名稱strOrderTotal)您的總數已經是一個字符串。 「C」格式說明符將數字轉換爲貨幣格式,而不是已經是字符串的東西。

因此,你需要手動格式化字符串作爲貨幣或套用貨幣格式時,訂單總額最初轉換爲字符串(當它存儲在strOrderTotal)。

1

如果strOrderTotal是您可以使用此代碼來格式化貨幣

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

不可以。您不能通過轉換將字符串轉換爲小數。 – 2012-04-25 21:47:22

+0

'decimal.Parse(string)'會起作用,但將一個小數轉換爲字符串不會。 – SouthShoreAK 2012-04-25 22:00:22

5

我不能相信所有這些答案的字符串,沒有人提到這一點,更改您的代碼

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

,看看是否能解決您的問題,但是一個更好的方式做這將是

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

這是很更容易看到發生了什麼,並刪除了很多字符串連接。

如果你願意做一些重新寫一個更好的解決方案是:(我做了一些邏輯,以示我的例子)

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

要顯示貨幣格式的字符串:

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

輸出:

您的總金額爲$ 25.00