格式化数字(Formatting Numbers)

   
如下翻译来自微软 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
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值