Chinaunix首页 | 论坛 | 博客
  • 博客访问: 77690
  • 博文数量: 30
  • 博客积分: 113
  • 博客等级: 民兵
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-02 00:37
文章分类
文章存档

2012年(20)

2011年(10)

我的朋友

分类:

2012-01-09 20:25:10

格式化数字(Formatting Numbers)

有机会能够接触到巨大的几乎无法理解的数字是系统管理工作中一件重要的事情例如当你在处理WMI中的Win32_LogicalDisk类时你可能会使用到属性FreeSpace这是一个返回磁盘驱动器上可使用的空间数值.在编写脚本人的某台测试计算机上下面是一个可能的返回值:

19385790464

这个数字究竟是多少呢让我想想它是 … 我认为他是 … 如果您能加上一些逗号分隔的话它是 – 我们要承认我们想不出来我们唯一知道的就是这个数字太大了.

事实的真相就是计算机根本就不需要 – 也不打算 – 使用格式友好的易于理解的数字然而对于计算机使用者确实完全不同的事情类似19385790464这样的数字对我们来说没什么用处更加有意义的数字类似于:

19,385,790,464

正如你亲眼看到的一旦你插入几个逗号我们就能够更加容易的知道这台计算机上的空闲磁盘空间比19GB多一点这件事情的道理非常的明显如果你希望输出的格式便于理解你就必须在显示他们之前先对他们进行格式化现在只有一个小问题了你如何才能在显示他们之前准确的格式化你的数字呢?

我们正在用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

阅读(4682) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~