C# 数字转字符串

//--------------忙忙碌碌,从代码的搬运工做起--------------//

  有时候,我们在使用TextBox显示参数数值时,如果直接转换成字符串输出,往往显示的格式不尽如意,为了能够转换成我们想要的格式输出,我们就需要用到格式化字符串。

  如果想要控制数字转字符串的显示精度,可以参考如下:

double i = 123456.78901;
//设置精度为3
string.Format("{0:F3}", i);
string.Format(("{0:0.000}", i);
string.Format(("{0:#.###}", i);
//当实际数字小数点后数字小于3个时,只显示实际个数,不会补零

  更多细节如下:

格式化字符串:

格式化的格式

string.Format("{ N [, M ][: formatString ]}", arg0, ... argN),在这个格式中:

  1. N是从0开始的整数,表示arg0-argN的索引
  2. M是可选的整数,表示格式化后的参数所占的宽度,如果M是负数,那么格式化后的值就是左对齐的,如果M是正数,那么格式化后的值是右对齐的
  3. formatString是可选的参数,表示格式代码
  4. argN表示要格式化的值,和N是对应的。

最简单的格式即string.Format("{0}",arg0)。

格式化标志符

字母  含义
C或c Currency 货币格式
D或d Decimal 十进制格式
E或e Exponent 指数格式
F或f Fixed point 固定精度格式
G或g General 常用格式
N或n 用逗号分割千位的数字,比如1234将会被变成1,234
P或p Percentage 百分符号格式
R或r Round-trip  圆整(只用于浮点数)保证一个数字被转化成字符串以后可以再被转回成同样的数字
X或x Hex 16进制格式

类似string.Format("{0:C2}",arg0),其中,C是格式化标志符,2是精度,精度默认是2,因此也可写成string.Format("{0:C}",arg0)。

示例代码:

double i = 123456.78;
Console.WriteLine("{0:C}", i);//¥123,456.78,货币(如需转换美元,详见下方)
Console.WriteLine("{0:C3}", i);//¥123,456.780,精度3,不足补零
Console.WriteLine("{0:D}", 0x123456);//1193046,十进制整数,可用于进制转换(使用小数会报错)
Console.WriteLine("{0:D10}", 0x123456);//0001193046,个数10,不足补零
Console.WriteLine("{0:E}", i);//1.234568E+005,科学技术法
Console.WriteLine("{0:E10}", i);//1.2345678000E+005
Console.WriteLine("{0:F}", i);//123456.78,固定精度,默认精度为2
Console.WriteLine("{0:F5}", i);//123456.78000
Console.WriteLine("{0:G}", i);//123456.78,常用格式,G后面带数字是指保留数字个数,默认全部显示
Console.WriteLine("{0:G5}", i);//1.2346E+05,设置个数小于实际个数时以科学计数法显示,保留5个数字
Console.WriteLine("{0:G6}", i);//123457,保留6个数字
Console.WriteLine("{0:G10}", i);//123456.78,设置个数大于实际个数时,保持实际个数,保留8个数字
Console.WriteLine("{0:N}", i);//123,456.78,千位分割
Console.WriteLine("{0:N10}", i);//123,456.7800000000
Console.WriteLine("{0:P}", i);//12,345,678.00%,百分数,默认精度为2
Console.WriteLine("{0:P10}", i);//12,345,678.0000000000%
Console.WriteLine("{0:X}", 123456);//1E240,十六进制整数,可用于进制转换(使用小数会报错)
Console.WriteLine("{0:X10}", 123456);//000001E240,个数10,不足补零
Console.WriteLine("{0:R}", i);//123456.78,保留17位有效数字
Console.WriteLine("{0:R}", 0.00001234567890123456789012345);//1.2345678901234568E-05
Console.WriteLine("{0:R}", 0.0001234567890123456789012345);//0.00012345678901234567
Console.WriteLine("{0:R}", 0.1234567890123456789012345);//0.12345678901234568
Console.WriteLine("{0:R}", 1.234567890123456789012345);//1.2345678901234567
Console.WriteLine("{0:R}", 3.4567890123456789012345);//3.4567890123456788
//补充
Console.WriteLine(i.ToString("C", new System.Globalization.CultureInfo("en-US")));//$123,456.78,美元

 图形化格式字符串

 符号 名称 含义
0 0占位符 用0填充不足的位数
# 数字占位符 用#代替实际的位数
. 十进制小数点  
, 千位分隔符 用逗号进行千位分割,比如把1000分割成1,000
% 百分符号 显示一个百分标识
E+0
E-0
e+0
e-0
指数符号 用指数符号格式化输出
\ 专一字符 用于传统格式的格式化序列,比如"\n"(新行)
'ABC'
"ABC"
常量字符串  显示单引号或者双引号里面的字符串
; 区域分隔符  如果数字会被格式化成整数,负数,或者0,用;来进行分隔
,. 缩放符号 数字除以1000

 示例代码:

double i = 123456.78;
Console.WriteLine("{0:0.000}", i);//123456.780,0占位符,不足补零
Console.WriteLine("{0:0000000.00}", i);//0123456.78
Console.WriteLine("{0:#.#}", i);//123456.8,#占位符
Console.WriteLine("{0:#.####}", i);//123456.78
Console.WriteLine("{0:0,0}", i);//123,457,千位分隔
Console.WriteLine("{0:0,0.0}", i);//123,456.8
Console.WriteLine("{0:,0.00}", i);//123456.78
Console.WriteLine("{0:#%}", i);//12345678%,百分比
Console.WriteLine("{0:#.#E+0}", i);//1.2E+5,科学计数法
Console.WriteLine("{0:#.#E-0}", i);//1.2E5
Console.WriteLine("{0:#.#E+0}", 0.000000123456789);//1.2E-7
Console.WriteLine("{0:#.#E-0}", 0.000000123456789);//1.2E-7
Console.WriteLine("{0:#.# 'Abc'}", i);//123456.8 Abc,添加字符串
Console.WriteLine("{0:#.#;#.##;<hello>}", i);//123456.8,分号区分正数、负数及零的不同格式化代码
Console.WriteLine("{0:#.#;#.##;<hello>}", -i);//123456.78
Console.WriteLine("{0:#.#;#.##;<hello>}", 0);//<hello>
Console.WriteLine("{0:0,.}", i);//123,缩放1000
Console.WriteLine("{0:0,.000}", i);//123.457

 参考flyingbread的《使用C#格式化字符串 ~》,详情请移步:https://www.cnblogs.com/zyh-nhy/archive/2007/10/11/921240.html

//--------------勤勤恳恳,做一只搬运知识的蚂蚁--------------//

posted @ 2021-07-08 16:45  MaQaQ  阅读(5784)  评论(0编辑  收藏  举报