2003年12月20日 20:08 点击:超过8000次
本篇ASP教程涉及到Len()、Fix()和Mid()三个函数,重点是Mid()函数的用法。这3个函数的用法请见VBScript函数手册,在此再简单介绍一下:Len(),返回字符串中的字符数目,例如Len("webshu")=6;Fix(),返回一个数值的整数部分,例如Fix(2.5)=2,若数值为正数的时候,Fix()和Int()没有任何区别;Mid()在ASP编程中,是非常常用的,返回字符串中从第N个字符开始取M个字符,它的格式是Mid("字符串",N,M),例如Mid("欢迎来到Webshu",3,2)="来到",Mid("欢迎来到Webshu",3,4)="来到We",Mid("欢迎来到Webshu",1,4)="欢迎来到"。Mid()函数非常重要,一定要熟练运用,多多练习。
首先,我们来运行令人激动的程序测试吧。在下面先输入任意一个大于3位数的数字:
运行的结果是:7,260,587,023
VBScript没有直接将数值转换成千进制的函数,例如要将1234578转化为1,234,578,我们只能通过编程来实现。我们应该知道千进制的含义,这是国际通用的,相当多的外国网站都使用千进制记数法。在此,再回顾一下它的读法,如下表:
千亿位 | 百亿位 | 十亿位 | , | 亿位 | 千万位 | 百万位 | , | 十万位 | 万位 | 千位 | , | 百位 | 十位 | 个位 |
5 | , | 2 | 3 | 0 | , | 1 | 6 | 9 | , | 5 | 0 | 0 |
例如5230169500,用国际千进制写作:5,230,169,500,国际书写时通常也记作5 230 169 500。如果给你一个5230169500的数字,如何让它自动转化为5,230,169,500呢?我们以ASP为例,设v9="5230169500",这里我们要把5230169500转化为字符串,只有转化为字符串,才可以让它支持转化的源对象为无限数字长度,从而减少报错的机率。将数值转化为字符串的方法很简单,方法是a=a&"",这个方法可以广泛地应用,可以用于ASP、PHP、CGI、JSP等各种编程语言。初步设计程序,思路如下:
<%v9=5230169500&""
va=len(v9)
if va<4 then
v2=v9
else
yi=Fix(va/3)
y2=(yi+1)*3
t1=3-(y2-va)+1
if yi=1 then v2=Mid(v9,1,(va-3))&","&Mid(v9,t1,3)
if yi=2 then v2=Mid(v9,1,(va-3*2))&","&Mid(v9,t1,3)&","&Mid(v9,t1+3,3)
if yi=3 then v2=Mid(v9,1,(va-3*3))&","&Mid(v9,t1,3)&","&Mid(v9,t1+3,3)&","&Mid(v9,t1+6,3)
if yi=4 ……
if yi=5 ……
if yi=va/3 and yi=2 then v2=Mid(v9,1,3)&","&Mid(v9,4,3)
if yi=va/3 and yi=3 then v2=Mid(v9,1,3)&","&Mid(v9,4,3)&","&Mid(v9,7,3)
if yi=va/4 and yi=4 ……
if yi=va/5 and yi=5 ……
end if%><%=v2%>
运算结果:5,230,169,500
详解:第2行,va=len(v9),设va为此数字的长度,v2为我们最后要得到的千进制数字。if va<4 then v2=v9,表示如果这个数字是4位数以内,那么结果就显示原来的数字v9。
第6行,yi=Fix(va/3),yi是最关键的变量,由它推算出每个字符的位置关系。第8行,t1=3-(y2-va)+1,其中y2-va表示:例如一个5位数,在它前面有1个空位,加上这个空位就是6位数了。3-(y2-va)则表示,从空位数起数的递加的位数。例如1234这个数,在这时候,yi=1,y2=(yi+1)*3=6,3-(y2-va)=3-(6-4)=1。所以,t1=3-(y2-va)+1=1+1=2,t1表示,第1个逗号后面开始数的位置,所以,1234这个数相对应的Mid(v9,t1,3)就是234。Mid(v9,1,(va-3))=1,所以Mid(v9,1,(va-3))&","&Mid(v9,t1,3)="1,234"。
当数字在6~8位数的时候,例如1357801这个7位数,yi=2,v2=Mid(v9,1,(va-3*2))&","&Mid(v9,t1,3)&","&Mid(v9,t1+3,3),这句表示:Mid(v9,1,(va-3*2)),其中va-3*2=1,它等效于Mid(v9,1,1),先取1357801的第一位数1;Mid(v9,t1,3),这时候t1=2,表示从第2位数起取3位,所以Mid(v9,t1,3)="357"。同理,Mid(v9,t1+3,3)=801。最后运算的结果,v2="1,357,801"
再举个例子:例如10357801这个8位数,Mid(v9,1,(va-3*2))=Mid(v9,1,(8-2))="10"。由此可以看出,Mid(v9,1,(va-3*2))这个代数式可以精确地算出前几位。
用这些公式:
if yi=1 then v2=Mid(v9,1,(va-3))&","&Mid(v9,t1,3)
if yi=2 then v2=Mid(v9,1,(va-3*2))&","&Mid(v9,t1,3)&","&Mid(v9,t1+3,3)
if yi=3 then v2=Mid(v9,1,(va-3*3))&","&Mid(v9,t1,3)&","&Mid(v9,t1+3,3)&","&Mid(v9,t1+6,3)
if yi=4 ……
假如正好有一个6位数,例如123000,它的运算结果是,123,000。所以就需要用if yi=va/3 and yi=2 then v2=Mid(v9,1,3)&","&Mid(v9,4,3)这个判断句再进行处理。其中,if yi=va/3 and yi=2(yi=3、yi=4……)表示此数字的长度为3、6、9、12,也就是3位数、6位数、9位数、12位数……。最后,将上述的if yi=1、if yi=2、if yi=3……这些判断句用一个循环程序合并在一起。最终合并后的程序如:
<%v9=1234578&""
va=len(v9)
if va<4 then
v2=v9
else
yi=Fix(va/3)
y2=(yi+1)*3
t1=3-(y2-va)+1
if yi<>va/3 then
e2=""
for i=1 to yi
v2=","&Mid(v9,t1+3*(i-1),3)
e2=e2+v2
next
v2=Mid(v9,1,(va-3*yi))&e2
else
e2=""
for y=2 to yi
v2=","&Mid(v9,(y-1)*3+1,3)
e2=e2+v2
next
v2=Mid(v9,1,3)&e2
end if
end if%><%=v2%>
运算结果:1,234,578
合并判断句后的这段程序非常难读懂,如果没有上述的初步程序设计,这段程序是非常难分析的。我们平时在设计程序的时候,要有一个清晰的思路。上述的“初步程序设计”,就是笔者在纸上打先草稿,推断每个字符所处的位置,然后再写这个程序。
如果你想让5230169500的运算结果为5 230 169 500,只要把上述的v2=","&Mid(v9,t1+3*(i-1),3)这句中的","改为" ",也就是把逗号改为空格。
翻过来,如何把5,230,169,500或5 230 169 500转化为5230169500呢?写一段替换程序,让它把逗号删除即可。
网页树树版权声明:
此文为Webshu.com独家撰稿,著作权属作者所有,禁止转载。
此文网址 http://webshu.com/column/102/44.html