(转)C#数字转固定长度的字符串

来源:互联网 发布:mac和windows哪个好用 编辑:程序博客网 时间:2024/05/29 15:21

 

 

 

 

关于数字右对齐和用0填充格式化字符串的方法


在向文件或者报表输出数字的时候,固定字符串的长度向右对齐,用0填充其余空间的情况很常见。在这种情况下,使用String类(System名称空间)的Format方法就很方便。

Format方法可以用参数设置字符串的格式以及指定相应的对象变量,本文提取一些经常用到的数字变换成字符串的情形进行介绍。

使用Format方法把数字夹杂在字符串中输出

在介绍数字的输出格式之前,首先回顾一下Format方法的基本用法。
Format方法的常用情形,就像以下的代码这样把变量夹杂在字符串中处理然后输出。

string name = "鈴木";
int month = 1;
int day = 30;

string str = String.Format(
"{0}先生、今日是{1}月{2}日。", name, month, day);
// 变量str的内容:鈴木先生、今日是1月30日。
Dim name As String = "鈴木"
Dim month As Integer = 1
Dim day As Integer = 30

Dim str As String = String.Format( _
"{0}先生、今日是{1}月{2}日。", name, month, day)
' 变量str的内容:鈴木先生、今日是1月30日。

Format方法的使用例子(上:C#、下:VB)

 

在这里,Format方法的第一个参数是用来指定字符串格式的,它往往通过在普通字符串中插入诸如{0}或{1}这样的修饰项目来实现。

这种修饰项目是用大括号把从0开始1,2,3这样的数字序列号包起来。在字符串处理时,把序号对应的对象转换成字符串替换即可。上述的例子就是,字符串str的值是:鈴木先生、今日是1月30日。

注,所有的对象都通过调用ToString方法来转换成字符串。

数字的格式指定

可以通过往刚才所说的修饰项目中添加几个参数来实现控制数字格式的目的。下表列出了几个常见的例子。

 

指定格式函数用法输出结果固定宽度右对齐String.Format("{0, 4}", num)“ 1”固定宽度左对齐String.Format("{0, -4}", num)“1 ”用0填充String.Format("{0:D4}", num)
或者
String.Format("{0:0000}", num)“0001”固定宽度并用0填充String.Format("{0, 8:D4}", num)“ 0001”常用的指定数字数字输出格式的例子 

这个表前两项指定了生成字符串的宽度。这只需要在序列号的后面加上 “,整数字” 这样的内容即可。负数的情况下表示左对齐。
第三项是用0填充空位的例子。这又有两种方法。一种是形如{0:D4}这样,在索引号后加上冒号,然后加上D(表示十进制,Decimal,如果是十六进制的话,就用X)加上表示宽度的整数(这里例子是4)。这种表示方法叫做“标准数字格式字符串”,具体可以参考MSDN的『标准数字格式字符串』。
用0填充的另一种方法是{0:0000},在序列号后加上冒号加上宽度等同数值个数的填充字符(也叫做占位符,英文placeholder。这里是4个0,也可以是4个1,4个2)。具体可以参考MSDN的『自定义数字格式字符串』。

表中最后一项演示了指定字符串的宽度,并且用0填充空余位置的方法。标准的语法是

 

{索引号, 字符串宽度:格式描述符}
格式指定的语法

 

Format方法的例子程序
下面,先看看几个实例程序

// formatint.cs

using System;

public class FormatInteger {
static void Main() {

string output;
int zero = 0;
int eleven = 11;

//// 例1

output = String.Format("4位右对齐【{0, 4}】", zero);
Console.WriteLine(output);
// 输出:4
位右对齐【 0】

output = String.Format("4
位右对齐
【{0, 4}】", eleven);
Console.WriteLine(output);
//
 输出:4位右对齐【 11】

//// 例2

Console.WriteLine ("【{0, 4}】【{1, 4}】", zero, eleven);
//
 输出:【 0】【 11】

//// 例3

Console.WriteLine("4
位左对齐【{0, -4}】", zero);
//
 输出:4位左对齐【0 】

Console.WriteLine("4
位左对齐
【{0, -4}】", eleven);
//
 输出:4位左对齐【11 】


Console.WriteLine("4位0填充【{0:D4}】", zero);
//
 输出:4位0填充
【0000】

Console.WriteLine("4
位0填充
【{0:D4}】", eleven);
//
 输出:4位0填充【0011】


Console.WriteLine("4
位0填充
【{0:0000}】", zero);
//
 输出:4位0填充【0000】

Console.WriteLine("4
位0填充
【{0:0000}】", eleven);
//
 输出:4位0填充【0011】


Console.WriteLine("8位长度4位0填充【{0, 8:D4}】", zero);
//
 输出8位长度4位0填充
【 0000】

Console.WriteLine("
8位长度4位0填充
【{0, 8:D4}】", eleven);
//
 输出8位长度4位0填充【 0011】

//// 例4

Console.WriteLine(
"【{0, 4}】【{0, -4}】【{0:D4}】【{0:0000}】", eleven);
//
 输出:【 11】【11 】【0011】【0011】
}
}

// 编译方法:csc formatint.cs
Format方法的C#实例程序(formatint.cs) 

 

' formatint.vb

Imports System

Public Class FormatInteger
Shared Sub Main()

Dim output As String
Dim zero As Integer = 0
Dim eleven As Integer = 11

'''' 例1

output = String.Format("4けた右詰め【{0, 4}】", zero)
Console.WriteLine(output)
'
 输出:4けた右詰め【 0】

output = String.Format("4けた右詰め【{0, 4}】", eleven)
Console.WriteLine(output)
'
 输出
:4けた右詰め【 11】

'''' 例2

Console.WriteLine ("【{0, 4}】【{1, 4}】", zero, eleven)
'
 输出:【 0】【 11】

'''' 例3

Console.WriteLine("4けた左詰め【{0, -4}】", zero)
'
 输出:4けた左詰め【0 】

Console.WriteLine("4けた左詰め【{0, -4}】", eleven)
'
 输出
:4けた左詰め【11 】


Console.WriteLine("4けた0埋め【{0:D4}】", zero)
'
 输出
:4けた0埋め【0000】

Console.WriteLine("4けた0埋め【{0:D4}】", eleven)
'
 输出
:4けた0埋め【0011】


Console.WriteLine("4けた0埋め【{0:0000}】", zero)
'
 输出
:4けた0埋め【0000】

Console.WriteLine("4けた0埋め【{0:0000}】", eleven)
'
 输出
:4けた0埋め【0011】


Console.WriteLine("8けたかつ4けた0埋め【{0, 8:D4}】", zero)
'
 输出
:8けたかつ4けた0埋め【 0000】

Console.WriteLine("8けたかつ4けた0埋め【{0, 8:D4}】", eleven)
'
 输出
:8けたかつ4けた0埋め【 0011】

'''' 例4

Console.WriteLine( _
"【{0, 4}】【{0, -4}】【{0:D4}】【{0:0000}】", eleven)
'
 输出:【 11】【11 】【0011】【0011】

End Sub
End Class

' 编译方法:vbc formatint.vb

 

 

 

其它格式:


C#:String.Format数字格式化输出


int a = 12345678;
   //格式为sring输出
//   Label1.Text = string.Format("asdfadsf{0}adsfasdf",a);
//   Label2.Text = "asdfadsf"+a.ToString()+"adsfasdf";
//   Label1.Text = string.Format("asdfadsf{0:C}adsfasdf",a);//asdfadsf¥1,234.00adsfasdf
//   Label2.Text = "asdfadsf"+a.ToString("C")+"adsfasdf";//asdfadsf¥1,234.00adsfasdf

   double b = 1234.12543;
   a = 12345678;
   //格式为特殊的string样式输出
//   Label1.Text = string.Format("asdfadsf{0:C}adsfasdf",b);//asdfadsf¥1,234.13adsfasdf
//   Label2.Text = "asdfadsf"+b.ToString("C")+"adsfasdf";//asdfadsf¥1,234.13adsfasdf
//   Label1.Text = string.Format("{0:C3}",b);//¥1,234.125
//   Label2.Text = b.ToString("C3");//¥1,234.125
//   Label1.Text = string.Format("{0:d}",a);//十进制--12345678
//   Label2.Text = b.ToString("d");//十进制--相同的类型,转换报错
//   Label1.Text = string.Format("{0:e}",a);//指数--1.234568e+007
//   Label2.Text = b.ToString("e");//指数--1.234125e+003

//   Label1.Text = string.Format("{0:f}",a);//定点数--12345678.00
//   Label2.Text = b.ToString("f");//定点数--1234.13
//   Label1.Text = string.Format("{0:n}",a);//数值--12,345,678.00
//   Label2.Text = b.ToString("n");//数值--1,234.13
//   Label1.Text = string.Format("{0:x}",a);//十六进制--bc614e
//   Label2.Text = b.ToString("x");//16--带有小数不能转换,出错
//   Label1.Text = string.Format("{0:g}",a);//通用为最紧凑--12345678
//   Label2.Text = b.ToString("g");//通用为最紧凑--1234.12543
//   Label1.Text = string.Format("{0:r}",a);//转来转去不损失精度--整数不允许用,报错
//   Label2.Text = b.ToString("r");//转来转去不损失精度--1234.12543
  
   b = 4321.12543;
   a = 1234;
   //自定义模式输出:
//   0 描述:占位符,如果可能,填充位
//   Label1.Text = string.Format("{0:000000}",a);// 001234
//   Label2.Text = string.Format("{0:000000}",b);// 004321
//   # 描述:占位符,如果可能,填充位
//   Label1.Text = string.Format("{0:#######}",a);// 1234
//   Label2.Text = string.Format("{0:#######}",b);// 4321
//   Label1.Text = string.Format("{0:#0####}",a);// 01234
//   Label2.Text = string.Format("{0:0#0000}",b);// 004321

//   . 描述:小数点
//   Label1.Text = string.Format("{0:000.000}",a);//1234.000
//   Label2.Text = string.Format("{0:000.000}",b);//4321.125
   b = 87654321.12543;
   a = 12345678;
//   , 描述:数字分组,也用于增倍器
//   Label1.Text = string.Format("{0:0,00}",a);// 12,345,678
//   Label2.Text = string.Format("{0:0,00}",b);// 87,654,32
//   Label1.Text = string.Format("{0:0,}",a);// 12346
//   Label2.Text = string.Format("{0:0,}",b);// 87654
//   Label1.Text = string.Format("{0:0,,}",a);// 12
//   Label2.Text = string.Format("{0:0,,}",b);// 88
//   Label1.Text = string.Format("{0:0,,,}",a);// 0
//   Label2.Text = string.Format("{0:0,,,}",b);// 0
//   % 描述:格式为百分数
//   Label1.Text = string.Format("{0:0%}",a);// 1234567800%
//   Label2.Text = string.Format("{0:#%}",b);// 8765432113%
//   Label1.Text = string.Format("{0:0.00%}",a);// 1234567800.00%
//   Label2.Text = string.Format("{0:#.00%}",b);// 8765432112.54%
//   'abc' 描述:显示单引号内的文本
//   Label1.Text = string.Format("{0:'文本'0}",a);// 文本12345678
//   Label2.Text = string.Format("{0:文本0}",b);// 文本87654321
//   \ 描述:后跟1要打印字的字符,也用于转移符\n等
//   Label1.Text = string.Format("\"你好!\"");// "你好!"
//   Label2.Text = string.Format("\\c\\books\\new\\we.asp");//\c\books\new\we.asp
//   @描述:后跟要打印字的字符,
//   Label1.Text = string.Format(@"""你好!"""); // "你好!"要打印"则需要输入两对才可以
//   Label2.Text = string.Format(@"\c\books\new\we.asp");//\c\books\new\we.asp


格式 原始数据 结 果
"{0:P}" 0.40 40%

数字 {0:N2} 12.36 
数字 {0:N0} 13 
货币 {0:c2} $12.36 
货币 {0:c4} $12.3656 
货币 "¥{0:N2}" ¥12.36 
科学计数法 {0:E3} 1.23E+001 
百分数 {0:P} 12.25% P and p present the same.
日期 {0:D} 2006年11月25日 
日期 {0:d} 2006-11-25 
日期 {0:f} 2006年11月25日 10:30 
日期 {0:F} 2006年11月25日 10:30:00 
日期 {0:s} 2006-11-26 10:30:00 
时间 {0:T} 10:30:00

DateTime dt = DateTime.Now;
Label1.Text = dt.ToString();//2005-11-5 13:21:25
Label2.Text = dt.ToFileTime().ToString();//127756416859912816
Label3.Text = dt.ToFileTimeUtc().ToString();//127756704859912816
Label4.Text = dt.ToLocalTime().ToString();//2005-11-5 21:21:25
Label5.Text = dt.ToLongDateString().ToString();//2005年11月5日
Label6.Text = dt.ToLongTimeString().ToString();//13:21:25
Label7.Text = dt.ToOADate().ToString();//38661.5565508218
Label8.Text = dt.ToShortDateString().ToString();//2005-11-5
Label9.Text = dt.ToShortTimeString().ToString();//13:21
Label10.Text = dt.ToUniversalTime().ToString();//2005-11-5 5:21:25

Label1.Text = dt.Year.ToString();//2005
Label2.Text = dt.Date.ToString();//2005-11-5 0:00:00
Label3.Text = dt.DayOfWeek.ToString();//Saturday
Label4.Text = dt.DayOfYear.ToString();//309
Label5.Text = dt.Hour.ToString();//13
Label6.Text = dt.Millisecond.ToString();//441
Label7.Text = dt.Minute.ToString();//30
Label8.Text = dt.Month.ToString();//11
Label9.Text = dt.Second.ToString();//28
Label10.Text = dt.Ticks.ToString();//632667942284412864
Label11.Text = dt.TimeOfDay.ToString();//13:30:28.4412864

Label1.Text = dt.ToString();//2005-11-5 13:47:04
Label2.Text = dt.AddYears(1).ToString();//2006-11-5 13:47:04
Label3.Text = dt.AddDays(1.1).ToString();//2005-11-6 16:11:04
Label4.Text = dt.AddHours(1.1).ToString();//2005-11-5 14:53:04
Label5.Text = dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04
Label6.Text = dt.AddMonths(1).ToString();//2005-12-5 13:47:04
Label7.Text = dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05
Label8.Text = dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10
Label9.Text = dt.AddTicks(1000).ToString();//2005-11-5 13:47:04
Label10.Text = dt.CompareTo(dt).ToString();//0
Label11.Text = dt.Add(?).ToString();//问号为一个时间段

Label1.Text = dt.Equals("2005-11-6 16:11:04").ToString();//False
Label2.Text = dt.Equals(dt).ToString();//True
Label3.Text = dt.GetHashCode().ToString();//1474088234
Label4.Text = dt.GetType().ToString();//System.DateTime
Label5.Text = dt.GetTypeCode().ToString();//DateTime

Label1.Text = dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:25
Label2.Text = dt.GetDateTimeFormats('t')[0].ToString();//14:06
Label3.Text = dt.GetDateTimeFormats('y')[0].ToString();//2005年11月
Label4.Text = dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日
Label5.Text = dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05
Label6.Text = dt.GetDateTimeFormats('D')[2].ToString();//星期六 2005 11 05
Label7.Text = dt.GetDateTimeFormats('D')[3].ToString();//星期六 2005年11月5日
Label8.Text = dt.GetDateTimeFormats('M')[0].ToString();//11月5日
Label9.Text = dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日 14:06
Label10.Text = dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:06
Label11.Text = dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT

Label1.Text = string.Format("{0:d}",dt);//2005-11-5
Label2.Text = string.Format("{0:D}",dt);//2005年11月5日
Label3.Text = string.Format("{0:f}",dt);//2005年11月5日 14:23
Label4.Text = string.Format("{0:F}",dt);//2005年11月5日 14:23:23
Label5.Text = string.Format("{0:g}",dt);//2005-11-5 14:23
Label6.Text = string.Format("{0:G}",dt);//2005-11-5 14:23:23
Label7.Text = string.Format("{0:M}",dt);//11月5日
Label8.Text = string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
Label9.Text = string.Format("{0:s}",dt);//2005-11-05T14:23:23
Label10.Text   string.Format("{0:t}",dt);//14:23
Label11.Text = string.Format("{0:T}",dt);//14:23:23
Label12.Text = string.Format("{0:u}",dt);//2005-11-05 14:23:23Z
Label13.Text = string.Format("{0:U}",dt);//2005年11月5日 6:23:23
Label14.Text = string.Format("{0:Y}",dt);//2005年11月
Label15.Text = string.Format("{0}",dt);//2005-11-5 14:23:23
Label16.Text = string.Format("{0:yyyyMMddHHmmssffff}",dt);


stringstr1 =string.Format("{0:N1}",56789);                //result: 56,789.0
stringstr2 =string.Format("{0:N2}",56789);                //result: 56,789.00
stringstr3 =string.Format("{0:N3}",56789);                //result: 56,789.000
stringstr8 =string.Format("{0:F1}",56789);                //result: 56789.0
stringstr9 =string.Format("{0:F2}",56789);                //result: 56789.00
stringstr11 =(56789 / 100.0).ToString("#.##");            //result: 567.89
stringstr12 =(56789 / 100).ToString("#.##");              //result: 567

C 或 c
货币
Console.Write("{0:C}", 2.5);   //$2.50
Console.Write("{0:C}", -2.5); //($2.50)

D 或 d
十进制数
Console.Write("{0:D5}", 25);   //00025

E 或 e
科学型
Console.Write("{0:E}", 250000);   //2.500000E+005

F 或 f
固定点
Console.Write("{0:F2}", 25);   //25.00
Console.Write("{0:F0}", 25);   //25

G 或 g
常规
Console.Write("{0:G}", 2.5);   //2.5

N 或 n
数字
Console.Write("{0:N}", 2500000);   //2,500,000.00

X 或 x
十六进制
Console.Write("{0:X}", 250);   //FA
Console.Write("{0:X}", 0xffff);   //FFFF

 

 

 

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 香港公司进出口没有申报怎么办 智能电视右上角网络未连接怎么办 电子秤按键板不好用怎么办失灵 桑塔纳车钥匙锁车里了怎么办 舌头上有锯齿印怎么办 夏天有脚气脚臭怎么办 xp分辨率太高黑屏怎么办 农村淘宝标识类目没了怎么办 被投诉到食品监督局怎么办 被客户315投诉了怎么办 给人打不接受调解怎么办 失业证年审忘了怎么办 工商年检过期4天怎么办 个体营业执照年审过期了怎么办 企业年报密码忘了怎么办 税务年报报错了怎么办 工商证过期5年怎么办 车年检标志丢了怎么办 年检标志打错了怎么办 贵州个体出租车工商执照年检怎么办 驾驶证考试预约提示网络繁忙怎么办 帝豪显示屏花屏怎么办 注册公司居委会不盖章怎么办 营业执照名字和店名不一样怎么办 开炸鸡店没经验怎么办 提名候选人时重名重姓怎么办 别人用我的店名怎么办 wish店铺出现侵权产品怎么办 如果公司缺人该怎么办 鲁班奖证书丢了怎么办 个人注册服务号没有营业执照怎么办 社保过了缴费日怎么办 被评为d级纳税人怎么办 忘了税号tfn怎么办 个体户没有办税务登记怎么办 遇征地企业不搬怎么办 dnf账号改错名了怎么办 银行卡绑定的手机号码换了怎么办 支付宝手机号码换了怎么办 淘宝账号被注销了怎么办 注销淘宝号绑定的手机号怎么办