如果我们使用下面的表达方式,让我们看看会发生什么
public class FormatSpecApp
{
public static void Main(string[] args)
{
int i = 123456;
Console.WriteLine("{0:C}", i); // ¥123,456.00
Console.WriteLine("{0:D}", i); // 123456
Console.WriteLine("{0:E}", i); // 1.234560E+005
Console.WriteLine("{0:F}", i); // 123456.00
Console.WriteLine("{0:G}", i); // 123456
Console.WriteLine("{0:N}", i); // 123,456.00
Console.WriteLine("{0:P}", i); // 12,345,600.00 %
Console.WriteLine("{0:X}", i); // 1E240
}
}
精度控制标识控制了有效数字的个数或者十进制数小数的位数。
Console.WriteLine("{0:C5}", i); // ¥123,456.00
Console.WriteLine("{0:D5}", i); // 123456
Console.WriteLine("{0:E5}", i); // 1.23456E+005
Console.WriteLine("{0:F5}", i); // 123456.00000
Console.WriteLine("{0:G5}", i); // 1.23456E5
Console.WriteLine("{0:N5}", i); // 123,456.00000
Console.WriteLine("{0:P5}", i); // 12,345,600.00000 %
Console.WriteLine("{0:X5}", i); // 1E240
R(圆整)格式仅仅对浮点数有效。这个值首先会用通用格式来格式化。对于双精度数有15位精度,对于单精度数有7位精度。如果这个值可以被正确地解析回原始的数字,就会用通用格式符来格式化。如果不能解析回去的话,那么就会用17位精度来格式化双精度数,用9位精度来格式化单精度数。尽管我们可以在圆整标识符后面添加有效数字的位数,但是它会被忽略掉。
double d = 1.2345678901234567890;
Console.WriteLine("Floating-Point:t{0:F16}", d); // 1.2345678901234600
Console.WriteLine("Roundtrip:t{0:R16}", d); // 1.2345678901234567
如果标准格式化标识符还不能满足你。你可以使用图形化格式字符串来创建定制的字符串输出。图形化格式化使用占位符来表示最小位数,
最大位数,定位符号,负号的外观以及其它数字符号的外观。就像下表所示
| 符号 | 名称 | 含义 |
| 0 | 0占位符 | 用0填充不足的位数 |
| # | 数字占位符 | 用#代替实际的位数 |
| . | 十进制小数点 | |
| , | 千位分隔符 | 用逗号进行千位分割,比如把1000分割成1,000 |
| % | 百分符号 | 显示一个百分标识 |
|
E+0 E-0 e+0 e-0 |
指数符号 | 用指数符号格式化输出 |
| 专一字符 | 用于传统格式的格式化序列,比如"n"(新行) | |
|
'ABC' "ABC" |
常量字符串 | 显示单引号或者双引号里面的字符串 |
| ; | 区域分隔符 | 如果数字会被格式化成整数,负数,或者0,用;来进行分隔 |
| ,. | 缩放符号 | 数字除以1000 |










