Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92255385
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-04 15:37:12

 

Linux管理手记

第三篇




#4 让数字更容易判读


直接显示未格式化的计算结果是程式设计师常犯的错误。如果我们沒有将43245435这个数加上一个干分号(数值中每隔三位加上的一个逗号).对使用者而言,他们很难直接读出这个数值的大小。请利用底下这个script来解決这个问题。


程式码







原理

nicenumber这个方程式是整个script最重要的部分,它主要的工作是将数值一个个的分离,凑足三个即加一个千份号,并将剩下的部分,反复的做上一个动作,直到全部处理完毕为止。


执行

不管你是使用预设或是有增加参数,请给这个程式一个非常大的数字,程式将视需要帮你添加千份号及小数点,并显示计算结果,如下所示:





结果





改进与加强

不同的国家在使用千份号及其小数点的表示方式各有不同,因此为了让程式更有弹性,我们增加了一个参数。 举例来看德国与意大利使用 -d “.”与 -t “,”,法国使用-d “,”and “”,还有四种语言的瑞士使用-d “.”and -t “´”。 因为有了这些好的例子,我们可以说:这支具有弹性的程式对于使用者而言,是一个相当实用的工具。另一方面,在程式中我来把输入的小数点固定为「.」,如果需要改变这个预设的符号时,大家可以修改两行程式,修改方式如下:





如果大家输入不同的小数点符号,对目前的程式而言,似乎不尽理想。让大家在输入前即可确认小数点符号,应该是比较理想的做法,因此我们可以在这两行程式前再增加一小段程式码,另外,我们也可以增加 #2中的测试程式,剪下需要的程式码即可:








#5 有效的整数输入


之前在 #2时曾经提过,要检查整数的输入是否正确是一件极为简单的事情,但是要确认负数的值就有一定的困难。比较有问题的是:每一个数值只能够在开始的位置摆上一个负号。本节script的功用,在于确认负号的格式是否正确,以及检查使用者是否能够大小输入数值。


程式码





执行

整个script程式是一个方程式,它可以复制在其他程式码中或者像函式库一样加在其他档案里。在执行程式前,请把底下的几行程式加在先前程式码的最末端:






结果





改进与加強
我们比须了解如果数字的第一个位置是负号,它是如何做测试:





如果第一个字元是负号.那麼程式会隔离负号並将testvalue的数值部份取出,取出的数值将会再分离並测试其中是否含有负号。你可以利用「and」来运算並且打算減少回圈,以下面的改法来看,这似乎可以正常运作:





然而,它並沒有正常的运作,因为你不能保証:如果第一个运算失败了,「and」将不会继续测试。理论上来說.如果失败,它就不会继续测试,但…




#6 有效的浮点输入


乍看之下,在shell script的范围与能力下处理浮点数(或实数)的运算看起来似乎有点困难;不过仔细想想浮点数也只不过是两个整数的组合。只不过两者间被一个小数点隔开了。如果将我们理解到的这一点放在其他的script中,你将可以体验到浮点数的运算速度有多麼的惊人。


程式码







执行

如果呼叫这个程式的过程中没有任何的错误信息,则系统会传回0, 这个数值的确是一个合法的浮点数。当你要测试之前,可以在上面的程式之后,增加下列几行程式码:





结果





================================

注意:
除错
如果你在此时看到其他的输出讯息,这很有可能是之前我们在validint中增加了几行程式,但加到这个程式时,忘了移除这几行了。请回到validint并移除这些程式即可。

================================


改进与加強

为了让这个程式能夠识別科学记号,我们必须对此程式稍做修改。修改方式並不困难,首先、我们必须先判断数值中有沒有´e´ 或 ´E´ 的存在,再来将数值分成三段:小数、整数与、0的次方。之后我们就可以利用validint来测试。



To be continued .........





出处:南方Linux
阅读(302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~