将 c++ CString.Format 语法转换为 .NET 字符串语法(可变前导宽度和小数位)

Posted

技术标签:

【中文标题】将 c++ CString.Format 语法转换为 .NET 字符串语法(可变前导宽度和小数位)【英文标题】:convert c++ CString.Format syntax to .NET string syntax (variable leading widths and decimal places) 【发布时间】:2013-03-25 20:03:53 【问题描述】:

如何将以下 C++ CString 代码转换为 C# .NET 等效代码?

CString str;
int leading_width  = 5;
int decimal_places = 2;
int val            = 53.4789;

str.Format("%*.*d", leading_width, decimal_places, val);

【问题讨论】:

【参考方案1】:

要获得可变的小数位数,请使用val.ToStringval 转换为字符串,然后使用String.PadLeft 填充值。

int leading_width  = 5;
int decimal_places = 2;
int val            = 53.4789;

string str = val.ToString("N" + decimal_places);
str = str.PadLeft(leading_width);

【讨论】:

谢谢 - 我没有意识到 ToString 方法可以接受格式参数 - 这当然可以简化事情。我最初是沿着“0, 1, D2”的路径走的,不幸的是它不受支持。【参考方案2】:

如果代码的目的是将整数或其他数字转换为字符串...

string NumString = val.ToString();

托管代码(c# 就是)有这个漂亮的 ToString 方法,代码中的每个对象都继承自 object 类。

有各种各样的格式规则可以应用于关于规则和填充的最终结果。

查看此页面了解更多详情:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

编辑

这段代码怎么样

String.Format("%0," + String.Format("0:D1", leading_width, decimal_places) + "", val); 

或者你可以去掉“%”,用“P”代替“D”

【讨论】:

谢谢,这更清楚了。我知道这很简单,我只是无法弄清楚 0, 1, D2 的语法。

以上是关于将 c++ CString.Format 语法转换为 .NET 字符串语法(可变前导宽度和小数位)的主要内容,如果未能解决你的问题,请参考以下文章

mfc中,如何将CString 转换成 string

CString .Format

CString::Format 的替代方案?

VC中BSTRChar*CString和CComBSTR类型的转换

将具有 OO 语法的 Matlab 转换为 c / c++ 而无需重写其功能

VS2010中CString Format 用法