Goodspeed

导航

用格式分类符正确地表示数字


在你的代码里操作数据可能需要各种步骤,但是不到将它们输出给用户的时候,你就不用担心将数据格式化的问题。.NET框架为正确地显示数据提供了各种选择。现在让我们更进一步地看一下数值数据的格式化。


格式化的格式是可选的,但是所有的基本数据类型(双精度型、整形、浮点型等等)都包括了标准的ToString方法。你可以使用这个方法来显示数据as-is,这是缺省的格式。例如,下面的C#代码创建了一个双精度变量,然后填充并显示了内容:
double dbl = 4.003333;
System.Console.WriteLine("The value is " + dbl.ToString());
输出结果是:
The value is 4.003333
ToString方法允许你很容易地显示变量的内容,但是它无法让你控制数据出现的方式。现在让我们更进一步看一下显示一个数值变量的各种方法。
指定你的格式
可以用来正确显示数字值的格式分类符有很多种。下面的列表把可用的分类符单独列出来了:
C —货币
D —小数
E或者e —指数
F —定点
G —普通
N —数值
X或者x —十六进制
P —百分数
分类符可以包括一个(附加的)数字,用来控制数值显示的精度。如果要使用格式分类符就需要将它附加给变量/数字,你要紧接着(字符串里的)变量占位符放一个冒号,再在冒号后面放格式分类符。下面C#代码的例子显示了这是如何进行的:
inttst = 550000;
System.Console.WriteLine("{0:C}", tst);
System.Console.WriteLine("{0:D}", tst);
System.Console.WriteLine("{0:E}", tst);
System.Console.WriteLine("{0:e}", tst);
System.Console.WriteLine("{0:F}", tst);
System.Console.WriteLine("{0:G}", tst);
System.Console.WriteLine("{0:N}", tst);
System.Console.WriteLine("{0:X}", tst);
System.Console.WriteLine("{0:x}", tst);
System.Console.WriteLine("{0:C3}", tst);
System.Console.WriteLine("{0:D9}", tst);
System.Console.WriteLine("{0:E12}", tst);
System.Console.WriteLine("{0:F7}", tst);
System.Console.WriteLine("{0:G4}", tst);
System.Console.WriteLine("{0:N10}", tst);
System.Console.WriteLine("{0:X8}", tst);
System.Console.WriteLine("{0:P8}", tst);
生成的输入如下:


$550,000.00
550000
5.500000E+005
5.500000e+005
550000.00
550000
550,000.00
86470
86470
$550,000.000
000550000
5.500000000000E+005
550000.0000000
5.5E+05
550,000.0000000000
00086470
正如上面例子所示,根据所指定的数据类型,(不同)精度导致了不同的结果。下面的列表描述了在和指定类型一起使用的时候,精度标识符的结果:
C, E, e, F, N:小数点右边所显示的数位的数量
D, G, x, X:小数点左边所显示的数位的总量
使用了这些格式分类符,数字就能够根据用户的需要来正确地显示。
自定义格式
另一个你可以用来格式化数字的方法叫做图片格式分类符。下面的列表说明了各种图片分类符,你可以用它们来根据用户的需要创建自己的数值格式。
0 —如果正在被格式化的值有一个数位(digit)所处的位置正是0出现在格式字符串里的位置,那么该数位就会被复制到输出字符串里。
. —显示正在被格式化的值的小数。原始值里只有一个小数点会被接受。
, —这个分组分隔符被用作千分符(出现在两个数字中间以及小数点的左边)。此外,如果原始值在其小数点的左边紧接着就有一个或者多个分组分隔符,那么该数值就会被数值分开,然后在被格式化之前乘以1,000。
# -如果正在被格式化的值有一个数位所处的位置正是#出现在格式字符串里的位置,那么该数位就会被复制到输出字符串里。
% —如果把这个百分号放在字符串里指定的位置,那么该值在被显示之前会乘以100。
E+0、e+0、e-0、E-0 —将值作为正确的指数格式化。
\ —字符引用
'abc'或者"abc" -字符串值
; —分段分隔符
你可以把以上各项组合起来,创建你项目所需要的任何输出。使用各种不同的组合并看到你所完成的东西是很酷的。更强大的特性之一是分段分隔符(即分号)。它能够让你显示一个字符串表示,如果数值是正数、负数或者零的话。此外,这个列表以外的所有值都可以直接放到输出里。这也就是说,你可以将它正确地放在值里,从轻易地显示一个美元标志($)。下面的VB.NET代码段就是一个实际使用的自定义格式:
Dim tst As Integer = 550000
System.Console.WriteLine("{0:#0;(#0)}", tst)
System.Console.WriteLine("{0:#0}%", tst)
System.Console.WriteLine("{0:$#.00 dollars is a lot of money!}", tst)
System.Console.WriteLine("{0:#E+0}", tst)
System.Console.WriteLine("{0:#e-0}", tst)
tst = -125000
System.Console.WriteLine("{0:#0;(#0);<value is zero>}", tst)
tst = 0
System.Console.WriteLine("{0:#0;(#0);<value is zero>}", tst)
执行这段代码就得到了下面的输出结果:
550000
550000%
$550000.00 dollars is a lot of money!
6E+5
6e5
(125000)
<value is zero>
这个例子显示了分组分隔符的用法,以及将字符传递给输出和作为指数、货币和百分号的格式。
选择你的格式
.NET的格式分类符允许你根据用户的要求调整程序的输出。乍一看上去,它的句法看起来很神秘,但是一旦你掌握了基本的规则,它就很容易使用了。

posted on 2004-08-25 17:33  Goodspeed  阅读(954)  评论(0)    收藏  举报