• English Edition | 站内检索:
  • 网站首页 | 网页技术 | 教程相关 | 软件应用 | 常见问题 | 新手上路 | 网页论坛 | 研究报告
    上网指南 | 网络病毒 | 邮件指南 | 解决方案 | 企业服务 | 服务中心 | 自由泳网 | 想象讲场

  •  网页树树 > 自由勇专栏

    自由勇-王志勇(1980-09-26)
    Webshu编辑。
    1994年开始练习五笔字形;2000年底开始学习和大量实践网页制作;从事网站程序设计。

    自由勇的Blog | 每天启航
    Blog存档

    Gratitude | Matnue | Aucist | Aroat | Aufirm | IXNes | Anydiary | Cersta | Coumit | Tovate | Aroat | Aucist | Matnue | Sinvide | Serble | Auciou | Peaceful Seabed | Sail every day | Sail every day

    访问统计:
    5545

        ASP经典技巧:千进制数字转换 作者:自由勇

    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,230,169,500

      例如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.cn/column/102/44.html

  • 关于我们 :: 使用帮助 :: 版权信息 :: 网站地图 :: 信息反馈
    Copyright © 2003-2025 webshu.com 版权所有