为什么这个字符串格式不是货币?

时间:2012-04-25 21:00:15

标签: c# asp.net formatting

我有以下一行:

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

观看节目:

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

但它只输出“35”。我预计“35.00美元”为什么这不按预期工作?

由于

9 个答案:

答案 0 :(得分:9)

我猜strOrderTotal是一个字符串?我认为{0:C}仅适用于decimal或int类型。

答案 1 :(得分: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();

答案 2 :(得分:2)

你没有展示strOrderTotal的声明,但是它的名字我假设它已经是string。因为它已经是一个字符串,格式化将不起作用。

如果您希望格式化工作,则需要将订单总数作为数字传递 - 最好是decimal

答案 3 :(得分:2)

因为它是一个字符串。

尝试格式化字符串会返回...字符串。

您需要一个数值才能将其格式化为货币。

您将看到C格式说明符在MSDN上的Standard Numeric Format String页面中定义。数字,而不是“字符串”。

答案 4 :(得分:2)

我认为strOrderTotal是字符串?它必须是十进制或双等

答案 5 :(得分:2)

我将假设strOrderTotal是一个字符串。您应该使用数字类型,如double或Decimal。

答案 6 :(得分:2)

看起来(基于变量名strOrderTotal)你的总数已经是一个字符串。 “C”格式说明符将数字转换为货币格式,而不是已经是字符串的格式。

因此,您需要手动将字符串格式化为货币,或者在订单总数最初转换为字符串时应用货币格式(当它存储在strOrderTotal中时)。

答案 7 :(得分:1)

如果strOrderTotal是一个字符串,您可以使用此代码将其格式化为货币

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

答案 8 :(得分:0)

以货币格式显示字符串:

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

输出:

  

您的总金额为$ 25.00