我们正在将我们的代码从 C++ 升级到 C#,并且在很多地方我们正在格式化字符串。例如,我们有类似的东西:
OurString.Format("amount = %0.2Lf", (long double)amount);
如何将 %0.2Lf 转换为 C# 格式?我试过下面的代码,但它不一样
string formatString = String.Format("amount = {0}", (long double)amount));
谢谢
我们正在将我们的代码从 C++ 升级到 C#,并且在很多地方我们正在格式化字符串。例如,我们有类似的东西:
OurString.Format("amount = %0.2Lf", (long double)amount);
如何将 %0.2Lf 转换为 C# 格式?我试过下面的代码,但它不一样
string formatString = String.Format("amount = {0}", (long double)amount));
谢谢
使用格式字符串:http: //msdn.microsoft.com/en-us/library/dwhawy9k.aspx
您可能需要N2
或F2
,具体取决于是否包含千位分隔符。所以,
string formatString = String.Format("amount = {0:F2}", amount);
编辑:
作为一个简单的 FYI,如果您在一系列不同的步骤中构造一个字符串,您可能希望使用StringBuilder
该类,该类具有一个AppendFormat()
接受与以下相同格式选项的方法string.Format()
:
var builder = new StringBuilder();
// ... Your code to build the first part of the string
builder.AppendFormat("amount = {0:F2}", amount);
// ... whatever else you need to add
builder.ToString(); // outputs your final/completed string.
是否使用StringBuilder
取决于内存管理和/或性能对应用程序的重要性;C# 中的字符串是不可变的,因此当您连接它们时,您实际上是在创建一个全新的字符串。您可以在此处阅读更多信息:http: //msdn.microsoft.com/en-us/library/system.string.aspx#Immutability
正如 Tieson 所写,F2
......请记住,在 C 中,默认语言环境是 C 语言环境。例如0.00
,在 C# 中,默认语言环境是用户的当前语言环境(在意大利0,00
)。所以最好这样做:
string formatString = String.Format(CultureInfo.InvariantLocale,
"amount = {0:F2}", amount);
如果您想始终以相同的方式格式化您的数字。请记住,当我告诉“在意大利”时,还意味着“如果我在美国使用意大利语 Windows 8,则默认语言环境对我来说将是意大利语”。
long double
啊...在 C# 中(或在 .NET 中,或因此在较新版本的 VC++ 中)没有s。只有double
s。
我要补充一点,使用 a double
(或 a long double
)来表示金钱本身就是一种反模式……它有十进制类型。
Decimal 值类型表示从正数 79,228,162,514,264,337,593,543,950,335 到负数 79,228,162,514,264,337,593,543,950,335 的十进制数。Decimal 值类型适用于需要大量有效整数和小数位且无舍入错误的财务计算。Decimal 类型不会消除舍入的需要。相反,它最大限度地减少了由于四舍五入引起的错误。例如,以下代码产生的结果是 0.9999999999999999999999999999 而不是 1。