什么是字符串格式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}
, 0
和1
是索引组件,它指向您要格式化的前2个元素。 -12
和12
是对齐组件。 它们可以是负值或正值。
正值表示右侧对齐,负值表示左侧对齐。
如果您想使用对齐组件,则必须 用逗号将其与索引组件分开。 正如您在语法上看到的那样,冒号( 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方法中使用)。 要将数字对齐到左侧,请使用负数空格。