数字格式化字符串

我们前一节学习了字符串占位符,学习了两种方式,其实除了这两种方式,C#还支持更复杂的格式化规则的。

基础格式占位符语法

{index,alignment:format}
1、index

索引 / 插值变量,必填

传统的数字占位符:Console.WriteLine(“{0}”, 123); 就是在{0}插入123

字符串插值$"":直接写变量名,无需数字索引,例如 Console.WriteLine($”Tom is {age} years old”)

例子

nt money = 1000;
Console.WriteLine("原值:{0}", money);
Console.WriteLine("货币:{0:C}", money);
Console.WriteLine("右对齐10位货币:|{0,10:C}|", money);Code language: C# (cs)
原值:1000
货币:$1,000.00
右对齐10位货币:| $1,000.00|

插值的方式

int money = 500;
Console.WriteLine($"原值:{money}");
Console.WriteLine($"货币:{money:C}");
Console.WriteLine($"右对齐10位货币:|{money,10:C}|");Code language: C# (cs)
2、alignment

对齐说明符,可选,逗号,分隔

作用:控制输出最小字符宽度与左右对齐

例如:Console.WriteLine(“{0,10}”, 123); //占 10 字符宽度,数字靠右

我们看到,123的左边有很多空白,这里的10,就是占十个字符串,也就是123的左边其实是7个空白字符,这样就达到了靠右对齐。

正数:右对齐,不足宽度左侧补空格 例:{0,10} → 占 10 字符宽度,数字靠右

负数:左对齐,不足宽度右侧补空格 例:{0,-10} → 占 10 字符宽度,数字靠左

比如我们改为

Console.WriteLine("{0,-10}", 123);  //占 10 字符宽度,负数,所以数字靠左Code language: C# (cs)

读者可能看不出效果,为了区分空白,我们可以这样

Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Code language: C# (cs)

像以上这样,读者就很清晰了,这里的10就是占10个字符,负数是靠左,正数是靠右,左右不够的补空格。

如果用插值的方式,等价于下面

int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Code language: C# (cs)
3、format

格式字段,可选,冒号:分隔

控制数字显示类型(货币、小数、科学计数、十六进制等)

格式字段结构 :Axx

  • : 必须紧贴占位符,无空格
  • A:单字母格式说明符(9 种内置标准格式,大小写部分区分)
  • xx:精度说明符(可选,1~2 位数字,含义随格式符变化)
// F4:定点格式,保留4位小数
Console.WriteLine("{0:F4}", 12.345678);

// 插值等价写法
Console.WriteLine($"{12.345678:F4}");Code language: C# (cs)

继续看例子

double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- General", myDouble);      // 12.345678 -- General
Console.WriteLine("{0,-10} -- Default", myDouble);         // 12.345678 -- Default
Console.WriteLine("{0,-10:F4} -- Fixed Point", myDouble);   // 12.3457  -- Fixed Point
Console.WriteLine("{0,-10:C} -- Currency", myDouble);     // $12.35    -- Currency
Console.WriteLine("{0,-10:E3} -- Sci. Notation", myDouble);//1.235E+001 -- Sci. Notation
Console.WriteLine("{0,-10:x} -- Hex integer", 1194719);   // 123adf    -- Hex integerCode language: C# (cs)

9 种标准数字格式说明符对照表

标识名称作用精度含义示例
C/cCurrency 货币带本地货币符号小数位数{0:C} 12.5 → $12.50
D/dDecimal 十进制整数仅 int 类型,补前导 0最少数字位数{0:D4} 12 → 0012
F/fFixed-point 定点小数固定小数位保留小数位数{0:F4} 12.345678 →12.3457
G/gGeneral 通用格式自动定点 / 科学计数,默认格式有效数字位数{0:G4} 12.345678 →12.35
X/xHexadecimal 十六进制(区分大小写)输出十六进制,X 大写、x 小写最少数字位数{0:x} 180026 → 2bf3a
N/nNumber 千位分隔数字千位分组分隔符小数位数{0:N2} 12345678.54321 →12,345,678.54
P/pPercent 百分比数值 ×100 后带 %小数位数{0:P2} 0.1221897 →12.22 %
R/rRound-trip 往返格式格式化后可无损转回原数字忽略精度{0:R} 1234.21897 →1234.21897
E/eScientific 科学计数(区分大小写)科学计数法,E 大写 /e 小写尾数小数位数{0:e4}12.3456789 →1.2346e+001

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注