如下翻译来自微软
TechNet
脚本中心
: http://www.microsoft.com/technet/scriptcenter/resources/pstips/jul07/pstip0720.mspx
译者: Edengundam(马涛)
格式化数字
(Formatting Numbers)
有机会能够接触到巨大的
,
几乎无法理解的数字是系统管理工作中一件重要的事情
.
例如
,
当你在处理
WMI
中的
Win32_LogicalDisk
类时
,
你可能会使用到属性
FreeSpace
,
这是一个返回磁盘驱动器上可使用的空间数值
.
在编写脚本人的某台测试计算机上
,
下面是一个可能的返回值
:
19385790464
这个数字究竟是多少呢
?
恩
,
让我想想
,
它是
…
我认为他是
…
如果您能加上一些逗号分隔的话它是
–
恩
,
我们要承认
:
我们想不出来
.
我们唯一知道的就是
,
这个数字太大了
.
事实的真相就是计算机根本就不需要
–
也不打算
–
使用格式友好的
,
易于理解的数字
.
然而
,
对于计算机使用者
,
确实完全不同的事情
.
类似
19385790464
这样的数字对我们来说没什么用处
;
更加有意义的数字类似于
:
19,385,790,464
正如你亲眼看到的
,
一旦你插入几个逗号
,
我们就能够更加容易的知道这台计算机上的空闲磁盘空间比
19GB
多一点
.
这件事情的道理非常的明显
:
如果你希望输出的格式便于理解
,
你就必须在显示他们之前先对他们进行格式化
.
现在只有一个小问题了
:
你如何才能在显示他们之前准确的格式化你的数字呢
?
如果我们还是在使用
VBScript
的话
,
答案相当的简单
:
我们只要简单的调用函数
FormatNumber
,
我便得到了我想要的结果
.
当然
,
我们并没有使用
VBScript;
我们正在用
Windows PowerShell.
我们只能说
, PowerShell
并不包含任何内建函数或
cmdlet
能够允许我们格式化数字
.
这似乎表明
,
我们得到的无格式数字是相当不走运啊
.
在
Windows PowerShell
中使用
.NET
来格式化数字
我们还能怎么样
? Windows PowerShell
确实没有任何的内建函数或
cmdlet
用来格式化数字
.
但是这没什么问题
;
我们不需要任何的内建函数或
cmdlets.
取而代之的是
,
我们只要使用
.NET
框架的格式化方法即可
.
例如
,
来思考下这个简单的
PowerShell
脚本
:
$a=19385790464
"{0:N0}" -f $a
当我们运行这个脚本时
,
我们会得到什么样的结果
?
这就是我们将会得到返回结果
:
19,385,790,464
换句话说
,
我们将会得到这种我们希望获得的格式有好的数字
.
那么我们究竟怎么做到的
?
回答这个问题前
,
让我们先来仔细看看我们的格式化命令
.
我们命令的核心就是这个不起眼的结构
: “{0:N0}”.
这真是一个看起来疯狂的代码
,
然而他也是一个很容易被分解的代码
:
l
最开头的
0
(
分号前面的
0)
表示被格式化项目的索引序号
.
以后使用时
,
只需要在这里填上
0,
格式化命令就会很好得为你工作
.
l
字符
N
表示了应用的格式类型
;
这个例子中
,
字符
N
就是
Numeric
的缩写
.
那着里还有其他我们可以应用的格式吗
?
当然还有了
,
我们稍后会再介绍一些的
.
l
第二个
0
(
字符
N
后面的
0)
被称为
“
精度指示符
,”
当与数字格式结合使用时
,
用于指示显示几位小数点后数字
.
这个例子中我们不希望显示任何小数点后的数字
,
所以我们设置为
0.
假设我们希望先是小数点后三位数字呢
?
没问题
;
这个命令将会注意到你的需求
: "{0:N3}" -f $a.
运行这个命令你将会得到类似这样的输出
: 19,385,790,464.000.
这就是我们所做的一切
;
在指定了格式类型后
,
我们指定参数
–f
(format),
然后跟着我们希望格式化的值
($a).
我们是不是只能格式化变量呢
?
当然不是啦
;
如果你想的话
,
你甚至可以格式字面值
:
"{0:N2}" -f 554.22272
试试这个命令
,
看看会得到什么样的结果
.
有一件事情你必须清楚
,
格式化命令仅仅控制着值的显示
;
值本身是不会发生任何变化的
.
例如
,
思考下面这个脚本
$a = 5.136
"{0:N0}" -f $a
如果我们运行这个脚本
,
屏幕上将会显示
5
;
如果我们在执行完脚本后显示变量
$a
的值
,
我们将会得到
:
5.136
如果你需要改变变量
$a
实际的值
,
你需要将格式化后的数字赋值给变量
(
就像这里的变量
$a):
$a = 5.136
$a = "{0:N0}" -f $a
现在你再次显示变量
$a
的值
,
你将会得到
:
5
更多有趣的格式化信息
我们之前已经注意到了
,
还有一些其他可以用于数字的格式
.
除了下面这些你能够应用于数字格式化的格式外
,
我们将不会继续深入讨论这一话题
:
名称
|
说明符
|
描述
|
货币
|
C
|
使用区域性的货币格式显示数值
,
精度描述用来控制显示小数点后数字个数
.
|
十进制
|
D
|
按照精度描述符指定的数字个数显示数值
;
如果需要在数字开头补
0.
|
百分数
|
P
|
数值先乘以
100,
然后以百分数形式显示
.
精度描述符指定显示的小数点位数
.
|
十六进制
|
X
|
数值被按照十六进制格式显示
.
精度描述符指示显示的字符数量
,
如果长度不足
,
在开头补
0.
|
试着运行下面的脚本
,
可以为您展示这些不同的格式是如何工作的
:
$a = 348
"{0:N2}" -f $a
"{0:D8}" -f $a
"{0:C2}" -f $a
"{0:P0}" -f $a
"{0:X0}" -f $a
这些事你将会得到的结果
:
348.00
00000348
$348.00
34,800 %
15C