将 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.ToString
将val
转换为字符串,然后使用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 字符串语法(可变前导宽度和小数位)的主要内容,如果未能解决你的问题,请参考以下文章
VC中BSTRChar*CString和CComBSTR类型的转换