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 美元” 为什么这没有按预期工作?

谢谢

4

9 回答 9

10

我猜 strOrderTotal 是一个字符串?我认为{0:C}仅适用于十进制或整数类型。

于 2012-04-25T21:02:48.273 回答
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();
于 2012-04-25T21:34:20.450 回答
2

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

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

于 2012-04-25T21:03:49.800 回答
2

你没有显示声明,strOrderTotal但我假设它已经是一个string. 由于它已经是一个字符串,因此格式将不起作用。

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

于 2012-04-25T21:02:40.303 回答
2

因为它是一个字符串。

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

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

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

于 2012-04-25T21:02:53.053 回答
2

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

于 2012-04-25T21:02:53.093 回答
2

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

于 2012-04-25T21:02:53.950 回答
1

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

clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", decimal.Parse(strOrderTotal) + "\n");
于 2012-04-25T21:08:27.483 回答
0

以货币格式显示字符串:

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

输出:

您的总金额为 25.00 美元

于 2016-12-22T03:00:23.350 回答