代码改变世界

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

2009-08-02 22:55  宝宝合凤凰  阅读(1265)  评论(0编辑  收藏  举报
关于数字右对齐和用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
Format方法的VB实例程序(formatint.vb)

就像例2所表明的,用控制台输出生成字符串的时候,Console这个类的Writeline方法也可以使用格式字符串来控制输出。

另外,像例4表明的,可以指定多个拥有同一个序列号的格式字符串。(其实用中文说就是同一个对象可以被多次格式化输出。)(完)