精度说明符作为参数,如printf但在String.Format中

时间:2010-08-26 16:33:13

标签: c# string printf string-formatting

使用printf我可以使用*将精度值指定为额外参数。 C#String.Format中是否存在相同的功能?

编辑例如:

Console.WriteLine("{0:D*}",1,4); // Outputs 0001

5 个答案:

答案 0 :(得分:4)

不,String.Format不支持星号运算符。您需要使用字符串连接

Console.WriteLine("{0:D" + myPrecision.ToString() + "}",1);

或嵌套String.Format s

Console.WriteLine(String.Format("{{0:D{0}}}", 4), 1);

答案 1 :(得分:4)

格式化格式字符串应该可以解决问题:

var number = 1;
var width = 4;
Console.WriteLine(String.Format("{{0:D{0}}}", width), number);

它将输出0001

请注意{{}}如何用于在格式字符串中转义{}

答案 2 :(得分:2)

是的,这是可能的。您只需要在格式说明符后添加精度数字。例如

Console.WriteLine("{0:D4}",1); // Outputs 0001;

精度修饰符的作用特定于所选的格式类型。在这种情况下,D代表十进制输出。以下是数字格式类型的链接以及每种格式的精度含义。

答案 3 :(得分:1)

我的解决方法类似于Qt如何实现QString::arg()。我只是放了一个占位符,然后将其替换为numericPrecision的值。

numericPrecision = "N2";
var summary = string.Format(
    "{0}: {1:_np_}, {2}: {3:_np_}, {4}: {5:_np_}".Replace("_np_", numericPrecision),
    title1, value1,
    title2, value2,
    title3, value3);

答案 4 :(得分:0)

格式化左对齐指定长度的字符串。

int len = 20;
string fmt = string.Format( "{{0,-{0}}}", len );
string name = string.Format( fmt, "a persons name" );

name.PadRight( len );

结果应该是在右边填充的名称,总长度为20个字符。