格式化数字(Formatting Numbers)

翻译 2007年09月23日 18:17:00
   
如下翻译来自微软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
 
 
 

相关文章推荐

Numbers10以上带圈数字

  • 2015-04-14 16:30
  • 25KB
  • 下载

PL/SQL 格式化指南 (PL/SQL Formatting Guide)

http://bianxq.iteye.com/blog/537478 最近一直在修改以前同事写的Oracle存储过程,由于编码不规范,修改起来相当费神,于是乎,翻译了这篇 PL/SQL Forma...

从清除浮动(clear float)谈拥有布局(has layout)与块级格式化范围(block formatting context)

float是网页布局中都要使用的css属性,他为我们灵活布局提供了方便,但同时浮动太多会带来很多麻烦,所以我通常的做法是使用float完后,马上清除他。float的本质是脱离的正常的html文档流,就...

BFC环境(block formatting context块级格式化上下文)

布局规则: 1.在BFC环境内部的所有元素按照垂直方向上一个接一个的放置; 2.相邻盒子(BOX)在垂直方向的margin值会重叠; 3.内部盒子会以BFC的左边(右边)线接触...

Excel条件格式化(conditional formatting)应用

条件格式化顾名思义就是根据条件对单元格进行格式化(填充,字体等)。 比如我们有一个学生成绩表,根据需要我们要把成绩按“不及格,60且90”进行颜色标注。

[Leetcode]Add Two Numbers 链表实现大数字相加

机智代码来源:http://www.2cto.com/kf/201401/275891.html C语言实现:/** * Definition for singly-linked list. *...

[LeetCode]448. Find All Numbers Disappeared in an Array(查找数组中消失的所有数字)

448. Find All Numbers Disappeared in an ArrayGiven an array of integers where 1 ≤ a[i] ≤ n (n = size...

算法百题007:数字逆序求和(Adding Reversed Numbers)

Reversed number is a number written in arabic numerals but the order of digits is reversed. Calculat...
  • fduan
  • fduan
  • 2011-05-11 16:35
  • 1366

Python学习笔记 —— 数字类型【Numbers】及常用方法

Tips: 在Python中数据类型不允许改变的,如果改变了,则会重新分配内存空间。 pi: 数字常量pi(圆周率) e:自然常数 Numbers支持四种不同的数值类型:整型...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)