String.Format-从C++移动到C#

本文关键字:移动 C++ Format- String | 更新日期: 2023-09-27 18:27:40

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

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

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

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

thx

String.Format-从C++移动到C#

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

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

string formatString = String.Format("amount = {0:F2}", amount);

编辑:

作为一个简单的参考,如果您在一系列不同的步骤中构造一个字符串,您可能希望使用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);

如果你想在任何地方都以相同的方式格式化你的数字。请记住,当我告诉"在意大利"也意味着"如果我在美国使用我的意大利语Windows8,默认的语言环境对我来说将是意大利语。"

啊。。。并且C#中没有long double(或者在.NET中,或者在更新版本的VC++中)。仅doubles.

我要补充的是,使用double(或long double)赚钱本身就是一种反模式。。。它有十进制类型。

Decimal值类型表示十进制数,范围从正79228162514264337593543950335到负792281625142 64337593541950335。十进制值类型适用于需要大量有效整数和小数且没有舍入误差的财务计算。Decimal类型并不能消除舍入的需要。相反,它最大限度地减少了由于舍入引起的误差。例如,以下代码生成的结果为0.9999999999999999999999,而不是1。