我有以下行:
//Send Email
clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", strOrderTotal + "\n");
观看节目:
String.Format("{0:C}", strOrderTotal + "\n") "35\n" string
但它只输出“35”。我预计“35.00 美元” 为什么这没有按预期工作?
谢谢
我有以下行:
//Send Email
clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", strOrderTotal + "\n");
观看节目:
String.Format("{0:C}", strOrderTotal + "\n") "35\n" string
但它只输出“35”。我预计“35.00 美元” 为什么这没有按预期工作?
谢谢
我猜 strOrderTotal 是一个字符串?我认为{0:C}
仅适用于十进制或整数类型。
我不敢相信所有这些答案,也没有人提到这一点,请将您的代码更改为
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();
看起来(基于变量 name strOrderTotal
)您的总数已经是一个字符串。“C”格式说明符将数字转换为货币格式,而不是已经是字符串的东西。
因此,您需要手动将字符串格式化为货币,或者在订单总额最初转换为字符串时应用货币格式(当它存储在 中时strOrderTotal
)。
你没有显示声明,strOrderTotal
但我假设它已经是一个string
. 由于它已经是一个字符串,因此格式将不起作用。
如果您希望格式化工作,您需要将订单总数作为数字传递 - 最好是decimal
.
我认为 strOrderTotal 是字符串?它必须是十进制或双精度等
我将假设这strOrderTotal
是一个字符串。您应该使用数字类型,例如 double 或 Decimal。
如果 strOrderTotal 是一个字符串,您可以使用此代码将其格式化为货币
clntMailBody = clntMailBody + "Order Total: " + String.Format("{0:C}", decimal.Parse(strOrderTotal) + "\n");
以货币格式显示字符串:
StringBuilder sb= new StringBuilder("Your total amount is ");
sb.AppendFormat("{0:C} ", 25 );
Console.WriteLine(sb);
输出:
您的总金额为 25.00 美元