保留两位小数var number = 123.4567    
   
number.toString().replace(/^(\d+\.\d{2})\d*$/,"$1")    
   
//结果:123.45   
其中$1是取前面规则的第一个小括号里的内容,为什么规则小括号后面还要加一个\d*???,好像\d*是取不到的吧????
有点疑惑括号里明明已经匹配了一到多个数字,中间匹配了点号,最后是匹配数字位数为两位,为什么括号外面要加\d*呢??

解决方案 »

  1.   


    楼主要理解这个代码用的是replace目的是替换.替换就相当于截取.把有用的替换出来.没有的剔掉
    (/^(\d+\.\d{2})\d* 这个表达式()里的东西是你想要的目标串.后面的是为了保证匹配整个字符串
    $1 只捕获()里的内容 也就是把\d*的给扔掉了
      

  2.   

    替换我是知道,$1是匹配第一个()里面的规则,我感觉匹配只需要这段:(\d+\.\d{2})就可以了,为什么这组规则后面还要加上\d*呢?这点我不是很明白.
      

  3.   

    replace 只能替换匹配滴部分!!!(\d+\.\d{2}) 匹配滴是 123.45,而 67 替换前后都会保留!/^(\d+\.\d{2})\d*$/ 匹配滴是 123.4567,而 $1 代表 123.45,因此才能达到替换滴目的!
      

  4.   

    $是代表字符串的结尾符.所以当他处在的时候.你必须首先保证你的输入字符串是只存在数字和.的
    ^也一样了.^是代表字符串开始的位置.
    有了他们.如果你的输入串是"s123.234ss"就不会做替换了.
      

  5.   


    呵呵,是哦,不过这个一般我是拿来处理一些小数的内容,如果number=123.0000,取出的值就只有123了,why?
      

  6.   

    <script>
    function getFixed(number){
    number = number.toFixed(3);
    number = number.slice(0,number.length-1);
    return number;
    }
    alert(getFixed(123.4567));//123.45
    alert(getFixed(123.45));//123.45
    alert(getFixed(123.4));//123.40
    alert(getFixed(123));//123.00
    </script>
      

  7.   

    L@_@K
    Math._floor = Math.floor;
    // 向下取整,扩展为按小数位截取。
    Math.floor = function(number, decimalLength){
    if (arguments.length == 2)
    {
    number *= Math.pow(10,decimalLength); return Math._floor(number)/Math.pow(10,decimalLength);
    }
    else
    return Math._floor(number);
    };Math._ceil = Math.ceil;
    // 向上取整,扩展为按小数位截取。
    Math.ceil = function(number, decimalLength){
    if (arguments.length == 2)
    {
    number *= Math.pow(10,decimalLength); return Math._ceil(number)/Math.pow(10,decimalLength);
    }
    else
    return Math._ceil(number);
    };Math._round = Math.round;
    // 四舍五入取整,扩展为按小数位截取。
    Math.round = function(number, decimalLength){
    if (arguments.length == 2)
    {
    number *= Math.pow(10,decimalLength); return Math._round(number)/Math.pow(10,decimalLength);
    }
    else
    return Math._round(number);
    };alert(Math.floor(123.567, 2));
    alert(Math.ceil(123.567, 2));
    alert(Math.round(123.567, 2));