http://www.cnblogs.com/thinhunan/archive/2006/11/04/550011.html

解决方案 »

  1.   

    <script language=javascript>
    /*
    参数1:以#表示数字或字符,可加入一个小数点,两个小数点就会出错,格式化后的样式
    参数2:每组格式之间的连接符
    */
    String.prototype.HBformatNumber=function(FormatParttern,ConnectOption)
    {
    if(!/#/.test(FormatParttern))//判断格式是不是可以进行格式化
    {
    return "格式错误";
    }
    var FormatPartternArray=FormatParttern.split("\.");//分开小数部分和整数部分的格式
    return splitNUM(this)
    function splitNUM(num)//此函数进行分开数字
    {
    NumArray=num.split("\.")
    if(NumArray.length==1)
    {
    return formatNUM(NumArray[0],FormatPartternArray[0],true)
    }
    else
    {
    if(FormatPartternArray.length==1)
    {
    return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+NumArray[1]
    }
    else
    {
    return formatNUM(NumArray[0],FormatPartternArray[0],true)+"."+formatNUM(NumArray[1],FormatPartternArray[1],false)
    }
    }
    }


    /*
    格式化字符串函数
    参数1:待格式化的字符串
    参数2:格式化样式
    参数3:是否为整数格式化,true为整数格式化,false为小数,字符串也为true
    */
    function formatNUM(num,Formatparttern,ifInterger)
    {
    var IntergerPushArray=new Array();//定义一个数组栈来存放整数
    var IntergerFormatPartternNum=Formatparttern.match(/\#/g).length//得到一组格式化样式中包含多少个数字/
    var IntegerParttern=(ifInterger)?(new RegExp(Formatparttern.replace(/[^#]/g,"").replace(/#/g,".")+"$")):new RegExp("^"+Formatparttern.replace(/[^#]/g,"").replace(/#/g,"."))//创建正则为了把每组数字取出来
    while(IntegerParttern.test(num))
    {
    IntergerPushArray.push(num.match(IntegerParttern))//把每一组放到数组中
    num=num.replace(IntegerParttern,"");//去掉这组,去拿下一组
    }
    if(num!="")
    {
    var RemainNum=num.length//剩下不够一组数字的时候判断还有几个数字
    var deleteNum=IntergerFormatPartternNum-RemainNum//一会需要去掉的数字个数
    for(var i=0;i<IntergerFormatPartternNum;i++)//把最后一组不够的位数加0填充
    {
    num=(ifInterger)?("0"+num):(num+"0")
    }
    num=(ifInterger)?num.substr((num.length-parseInt(IntergerFormatPartternNum))):num.substr(0,IntergerFormatPartternNum)//得到最后一个格式化后的函数
    IntergerPushArray.push(num);//将最后一组进栈
    }
    for(var i=0;i<IntergerPushArray.length;i++)
    {
    var j=-1;
    var str=IntergerPushArray[i].toString();
    IntergerPushArray[i]=Formatparttern.replace(/(#)/g,function($1){j++;return str.substr(j,1)})//替换
    }
    if(ifInterger)//如果整数返回数组逆序,并且通过连接字符连接每组数据,去掉多余的0;否则返回格式化后的小数部分
    {
    return (IntergerPushArray.reverse().join(ConnectOption).substr(parseInt(deleteNum)))
    }
    else
    {
    return(IntergerPushArray.join(ConnectOption))
    }
    }
    }
    var a="12324536789.1243211";//在这里修改要格式化的字符串
    var b="20050908"
    var c="20050908091500"
    var d="abcssfasdfsdfsdf"
    //alert(a.HBformatNumber("###.###",","))//可以按各种需要进行格式化,比如格式化3位一组
    //alert(a.HBformatNumber("###",","))//只格式化整数部分,3位一组
    //alert(b.HBformatNumber("####-##-##",""))//时间字符串也支持,可以把input的maxlength属性设为相应格式的最大长度,这样就不会出现两组了,不过没有判断是否为时间对象
    //alert(c.HBformatNumber("####-##-## ##:##:##",""))//可以加时分秒
    //alert(a.HBformatNumber("###,##.#-##"," "))//支持大部分特殊格式
    //alert(d.HBformatNumber("###",","))//支持大部分字符串alert("19000".HBformatNumber("###",","))
    </script>
      

  2.   

    <script type="text/javascript">
    //<![CDATA[
    var nNum=14.123456789;
    var temp='';
    for(var i=0; i<10; i++){
    temp+=i+1;
    document.write(fNumFormat(temp, 3),'<br/>');
    document.write(fNumFormat(temp+'.'+temp, 3),'<br/>');
    }
    function fNumFormat(nNumber, nLength){
    if(!nLength)var nLength=3;
    if(!nNumber)return false;
    nNumber+='';
    if(/\./.test(nNumber)){
    nNumber=nNumber.replace(/(^.*?)\./,function($1,$2){
    return padCma($2)+'.'
    });
    } else nNumber=padCma(nNumber);
    return nNumber;

    function padCma(str){
    var temp='';
    var nLen=str.length;
    while(nLen>nLength){
    temp+=','+str.slice(nLen-=nLength, nLen+nLength);
    }
    if(nLen>0) temp=str.slice(0, nLength)+temp;
    return temp;
    }
    } // shawl.qiu script
    //]]>
    </script>
      

  3.   

    倒, 丢人呀, 刚才在朋友处上网, 随便写了一个, 错得离谱...//<![CDATA[
    var nNum=14.123456789;
    var temp='';
    for(var i=0; i<10; i++){
    temp+=i+1;
    document.write(temp,'<br/>')
    document.write(fNumFormat(temp, 3),'<p/>');

    document.write(temp+'.'+temp,'<br/>')
    document.write(fNumFormat(temp+'.'+temp, 3),'<p/>');
    }
    function fNumFormat(nNumber, nLength, sSymbol){
    if(!nLength)var nLength=3;
    if(!sSymbol)var sSymbol=',';
    if(!nNumber)return false;
    nNumber+='';
    if(/\./.test(nNumber)){
    nNumber=nNumber.replace(/(^.*?)\./,function($1,$2){
    return padCma($2)+'.'
    });
    } else nNumber=padCma(nNumber);
    return nNumber;

    function padCma(str){
    var temp='';
    var nLen=str.length;
    while(nLen>nLength){
    temp=sSymbol+str.slice(nLen-=nLength, nLen+nLength)+temp;
    }
    if(nLen>0&&nLen<=3) temp=str.slice(0, nLen)+temp;
    return temp;
    }
    } // shawl.qiu script
    //]]>
    </script>
      

  4.   

    不想做for循环,借vbscript的FormatNumber函数来用一下:<script language=vbs>
    Function FormNumer(num)
    FormNumer = FormatNumber(num,2)
    End Function
    </script>
    <script language=javascript>
    var num = 19000;
    alert(FormNumer(num))  //19,000 
    </script>