2

我们正在将我们的代码从 C++ 升级到 C#,并且在很多地方我们正在格式化字符串。例如,我们有类似的东西:

OurString.Format("amount = %0.2Lf", (long double)amount);

如何将 %0.2Lf 转换为 C# 格式?我试过下面的代码,但它不一样

string formatString = String.Format("amount = {0}", (long double)amount));

谢谢

4

2 回答 2

5

使用格式字符串:http: //msdn.microsoft.com/en-us/library/dwhawy9k.aspx

您可能需要N2F2,具体取决于是否包含千位分隔符。所以,

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

于 2013-08-15T06:15:24.793 回答
3

正如 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。只有doubles。

我要补充一点,使用 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。

于 2013-08-15T06:21:58.697 回答