什么是字符串格式C#{0,12:N0}(冒号和逗号)是什么意思?

好的,这是代码示例:

string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n", "City", "Year", "Population", "Change (%)"); Console.WriteLine(header); string output; foreach (var city in cities) { output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}", city.Item1, city.Item2, city.Item3, city.Item4, city.Item5, (city.Item5 - city.Item3)/ (double)city.Item3); Console.WriteLine(output); } } } // The example displays the following output: // City Year Population Year Population Change (%) // // Los Angeles 1940 1,504,277 1950 1,970,358 31.0 % // New York 1940 7,454,995 1950 7,891,957 5.9 % // Chicago 1940 3,396,808 1950 3,620,962 6.6 % // Detroit 1940 1,623,452 1950 1,849,568 13.9 % 

我知道args之后的冒号{0:N0}意味着没有小数,但是昏迷呢? 像{0,-12}和{1,12}字符串格式的参数后逗号的含义是什么?

MSDN文档是你的朋友(我上面评论中给出的链接也不是最好的):
复合格式

每个格式项采用以下forms,包含以下组件:{index [,alignment] [:formatString]}

所以index显然是提供的参数的索引:

 String.Format("Second argument = {1}, first argument = {0}", arg1, arg2); 

Alignment指定所需的字段宽度和水平对齐:

如果对齐为正,则字段中的格式化数据右对齐;如果对齐为负,则对齐左对齐。

 String.Format("{0,-12}" + // first argument, left align, 12 character wide column "{1,8:yyyy}" + // second argument, right align, 8 character wide column, // formatted as a year "{2,12:N0}" + // third argument, right align, 12 character wide column, // formatted as a number, 0 decimal places 

和您已经知道的formatString (例如,数字(“N”)格式说明符 )。

它们是索引组件对齐组件,它是复合格式的一部分。 这是复合格式化语法;

 {index[,alignment][:formatString]} 

在您的情况下, {0,-12}{1,12}01是索引组件,它指向您要格式化的前2个元素。 -1212是对齐组件。 它们可以是负值或正值。

正值表示右侧对齐,负值表示左侧对齐。

如果您想使用对齐组件,则必须 用逗号将其与索引组件分开。 正如您在语法上看到的那样,冒号( formatString将对齐组件与formatString分开。

由于您使用{0,-12}作为"Los Angeles"11字符),因此它将与左侧的一个( 12 - 11 )空白字符对齐。

 Console.WriteLine("{0, -12}{1}", "Los Angeles", "1940"); // prints "Los Angeles 1940" 

但是Chicago (这是7字符),它将左边的五( 12 - 7 )个空格字符对齐;

 Console.WriteLine("{0, -12}{1}", "Chicago", "1940"); // prints "Chicago 1940" 

对于正值;

 Console.WriteLine("{0, 12}{1}", "Los Angeles", "1940"); // prints " Los Angeles1940" 

 Console.WriteLine("{0, 12}{1}", "Chicago", "1940"); // prints " Chicago1940" 

数字(“N”)格式说明符

数字(“N”)格式说明符将数字转换为“-d,ddd,ddd.ddd …”forms的字符串,其中“ – ”表示负数字符号(如果需要),“d”表示数字(0 -9),“,”表示组分隔符,“。” 表示小数点符号。 精度说明符表示小数点后的所需位数。 如果省略精度说明符,则小数位数由当前NumberFormatInfo.NumberDecimalDigits属性定义。

结果字符串受当前NumberFormatInfo对象的格式设置信息的影响。 下表列出了控制结果字符串格式的NumberFormatInfo属性。

对于N0,实际输出将不包含小数点后的数字(如整数值)。

将数字与空格对齐

要将浮点数对齐,请在冒号前使用逗号“,”选项。 键入逗号后跟多个空格,例如“0,10:0.0”(这只能在String.Format方法中使用,而不能在double.ToString方法中使用)。 要将数字对齐到左侧,请使用负数空格。