繁体   English   中英

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

[英]String.Format - moving from C++ to C#

我们正在将代码从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

您可能需要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

正如Tieson所写, F2 ......请记住,在C语言中,默认语言环境是C语言环境。 所以例如0.00 ,而在C#中,默认语言环境是用户的当前语言环境(这里是意大利语0,00 )。 所以最好这样做:

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

如果您希望始终以相同的方式格式化您的数字。 请记住,当我告诉“在意大利这里”也意味着“如果我在美国使用我的意大利Windows 8,我的默认语言环境将是意大利语。”

啊......并且在C#中没有long double (或者在.NET中,或者在VC ++的新版本中出于这个原因)。 只有double

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

十进制值类型表示十进制数,范围从正数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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM