C#零基础入门 基础语法 -- 输出格式控制
前言
本文属于C#零基础入门之百识百例系列文章。此系列文章旨在为学习C#语言的童鞋提供一套系统的学习路径。此系列文章都会通过【知识点】【练习题】的形式呈现。有任何问题,你都可以通过评论,私信等方式找到我,我会一对一解答你的问题。
系列文章目录:
《C#零基础入门之百识百例》 目录文章传送门
上篇文中学习了输入输出,其中的Write方法和WriteLine方法有18中重载。
当方法不只一个参数时,第一个参数是一个可以定义个数的字符串,所以称之为格式字符串。
一,格式化输出
格式字符串可以代替标记:
- 代替标记在格式字符串中标出的位置
- 它由一个大括号和一个被括住整数的组成,其中整数是替换值的位置
- 整数从0开始,依次替换替换值
语法如下:
Console.WriteLine("格式字符串{标记1},{标记2}...{标记n}", 值1, 值2, ... ,值n);
图示:
1.1 代码示例
// 输出等式
Console.WriteLine("1 + 1 = 2");
// 等价于
Console.WriteLine(1 + " + " + 1 + " = " + 2);
// 等价于
Console.WriteLine("{0} + {1} = {2}", 1, 1, 2);
输出结果:
1 + 1 = 2
1 + 1 = 2
1 + 1 = 2
1.2 相关拓展
- 在值替换标记时,值可以以任何顺序使用,值也可以多次使用。
示例:
Console.WriteLine("{0} + {1} = {0}", 1, 1);
- 若标记值超出实际值的长度,程序运行时会发生错误。
示例:
Console.WriteLine("{0} + {1} = {3}", 1, 1, 2);
- 控制数值位数
我们可以向占位符中添加格式字符串来控制数值的位数,其格式为{i, w},其中i是参数索引,w表示宽度值(数值位数),w为正数表示右对齐,w为负数表示左对齐
示例:
Console.WriteLine("{0,1}+{1, 2}={2, 3}", 1, 1, 2);
Console.WriteLine("{0,1}+{1, 2}={2, 3}", 11, 11, 22);
由上例可看出数值本身也是参与计算长度的。
二,格式说明符
C#中的占位符还有一种格式说明符的拓展,就是在宽度前加上特殊说明符,格式为{i, Xw},其中是参数索引,w表示宽度值,而X就是我们下面要说的格式说明符了…
2.1 标准数字格式说明符
格式字符串 | 说明 | 示例 |
---|---|---|
C | 本地货币格式 | Console.WriteLine(“C, 精度3 ==> {0:C3}”, 3.1415926); // C, 精度3 ==> $3.142 |
D | 十进制字符串格式,位数不足精度,前置0补足 | Console.WriteLine(“D, 精度3 ==> {0:D3}”, 10); // D, 精度3 ==> 010 Console.WriteLine(“D, 精度3 ==> {0:D3}”, 1000); // D, 精度3 ==> 1000 |
E | 科学计数法,默认为6位小数,可控制小数位数 | Console.WriteLine(“E, 精度3 ==> {0:E3}”, 3.1415926); // E, 精度3 ==> 3.142E+000 |
F | 浮点数格式,可控制小数位数,可以为0 | Console.WriteLine(“F, 精度3 ==> {0:F3}”, 3.1415926); // F, 精度3 ==> 3.142 |
G | 普通格式,使用E还是F格式取决于那种格式最简单 | Console.WriteLine(“E或F, 精度3 ==> {0:G3}”, 3.1415926); // E或F, 精度3 ==> 3.14 |
N | 数字格式,用逗号表示千分符 | Console.WriteLine(“N, 精度3 ==> {0:N3}”, 3.1415926); // N, 精度3 ==> 3.142 |
P | 百分数格式 | Console.WriteLine(“P, 精度3 ==> {0:P3}”, 3.1415926); // P, 精度3 ==> 314.159% |
X | 16进制格式 | Console.WriteLine(“X, 精度1 ==> {0:X1}”, 10); // X, 精度1 ==> A Console.WriteLine(“X, 精度4 ==> {0:X4}”, 10); // X, 精度4 ==> 000A |
表中示例代码:
Console.WriteLine("十进制字符串:D, 精度3 ==> {0:D3}", 10);
// 十进制字符串:D, 精度3 ==> 010
Console.WriteLine("十进制字符串:D, 精度3 ==> {0:D3}", 1000);
// 十进制字符串:D, 精度3 ==> 1000
Console.WriteLine("科学技术法:E, 精度3 ==> {0:E3}", 3.1415926);
// 科学技术法:E, 精度3 ==> 3.142E+000
Console.WriteLine("浮点数格式:F, 精度3 ==> {0:F3}", 3.1415926);
// 浮点数格式:F, 精度3 ==> 3.142
Console.WriteLine("普通格式E或F, 精度3 ==> {0:G3}", 3.1415926);
// 普通格式E或F, 精度3 ==> 3.14
Console.WriteLine("千分符格式:N, 精度3 ==> {0:N3}", 3.1415926);
// 千分符格式:N, 精度3 ==> 3.142
Console.WriteLine("百分数格式:P, 精度3 ==> {0:P3}", 3.1415926);
// 百分数格式:P, 精度3 ==> 314.159%
Console.WriteLine("十六进制格式:X, 精度1 ==> {0:X1}", 10);
// 十六进制格式:X, 精度1 ==> A
Console.WriteLine("十六进制格式:X, 精度4 ==> {0:X4}", 10);
// 十六进制格式:X, 精度4 ==> 000A
2.2 自定义数字格式说明符
格式字符串 | 说明 | 示例 |
---|---|---|
0 | 0占位符,用对应的数字替换0。若不存在则显示0 | Console.WriteLine(“0占位符 ==> {0:0.0000}”, 3.14); // 0占位符 ==> 3.1400 |
# | 数字占位符,用对应的数字替换#标记 | Console.WriteLine("#占位符 ==> {0:#.##}", 3.1415); // #占位符 ==> 3.14 |
. | 小数点,确定小数点分隔符在字符串中的位置 | Console.WriteLine(".小数点 ==> {0:00.00}", 1.234); // .小数点 ==> 01.23 |
% / ‰ | 百/千分比占位符,将数字乘以100/1000, 并在结果字符串汇总插入本地化百/千分比符号 | Console.WriteLine("%百分号 ==> {0:%0.00}", 0.314); // % 百分号 ==> % 31.40 Console.WriteLine("‰千分号 ==> {0:0.000‰}", 0.314); // ‰千分号 ==> 314.000‰ |
Console.WriteLine("0占位符 ==> {0:0.0000}", 3.14);
// 0占位符 ==> 3.1400
Console.WriteLine("#占位符 ==> {0:#.##}", 3.1415);
// #占位符 ==> 3.14
Console.WriteLine(".小数点 ==> {0:00.00}", 1.234);
// .小数点 ==> 01.23
Console.WriteLine("%百分号 ==> {0:%0.00}", 0.314);
// % 百分号 ==> % 31.40
Console.WriteLine("‰千分号 ==> {0:0.000‰}", 0.314);
// ‰千分号 ==> 314.000‰
实例练习 – 竖式计算
class Program
{
static TaskCompletionSource<string> ts;
static void Main(string[] args)
{
Console.WriteLine("----- 竖式计算 -----");
int a = 10;
int b = 20;
Console.WriteLine(" " + a);
Console.WriteLine("+ " + b);
Console.WriteLine("----------");
Console.WriteLine(" " + (a + b));
Console.WriteLine();
Console.WriteLine("{0,8}" , a);
Console.WriteLine("+{0,7}" , b);
Console.WriteLine("----------");
Console.WriteLine("{0,8}" , (a + b));
Console.WriteLine();
Console.WriteLine("{0,8}\n+{1,7}\n----------\n{2,8}", a, b, a + b);
Console.ReadLine();
}
}