parseFloat(numberRound)*100 = 30772.499999999996round 方法
返回与给出的数值表达式最接近的整数。Math.round(number) 必选项 number 参数是要舍入到最接近整数的值。说明
如果 number 的小数部分大于等于 0.5,返回值是大于 number 的最小整数。否则,round 返回小于等于 number 的最大整数。 

解决方案 »

  1.   

    我测试没有问题呀!!win2k3+IE6
      

  2.   

    谢谢,我试了,本系统最大支持6位小数。所以这样写function R_(numberRound,roundDigit){
    var sOffsetPara = 1000000 ;
    return parseFloat(parseFloat(numberRound*sOffsetPara).toFixed(roundDigit)/sOffsetPara).toFixed(roundDigit);
    }TO:meizz(梅花雪) ,我是WIN2000,SP1,win2k3+IE6没问题吗?
      

  3.   

    if(typeof(Number.prototype.toFixed)!="function")
    {
        Number.prototype.toFixed = function(d)
        {
            var s=this+"";if(s.indexOf(".")==-1)s+=".";s+=new Array(d+1).join("0");
            if (new RegExp("^((-|\\+)?\\d+(\\.\\d{0,"+ (d+1) +"})?)\\d*$").test(s))
            {
                s="0"+ RegExp.$1, pm=RegExp.$2, a=RegExp.$3.length, b=true;
                if (a==d+2){a=s.match(/\d/g); if (parseInt(a[a.length-1])>4)
                {
                    for(var i=a.length-2; i>=0; i--) {a[i] = parseInt(a[i])+1;
                    if(a[i]==10){a[i]=0; b=i!=1;} else break;} //author: meizz
                }
                s=a.join("").replace(new RegExp("(\\d+)(\\d{"+d+"})\\d$"),"$1.$2");
            }if(b)s=s.substr(1); return (pm+s).replace(/\.$/, "");} return this+"";
        };
    }自己写了一个修正的方法,应该可以满足你的需求了,若是你觉得系统的那个 toFixed() 方法有问题的话,你可以把我这段代码最外面的那层if判断去掉,全用自己写的这个方法!这个方法我暂时测试了一下,好象没有什么问题,不过可能测试不够,你自己再测试一下吧。
      

  4.   

    <script>
    alert("50 * (61545 / 10000) = " + ( 50 * (61545 / 10000) ))
    alert("50 * 61545 / 10000 = " + ( 50 * 61545 / 10000 ))
    </script>
      

  5.   

    楼主标题太耸人听闻,就算真有bug,你也应该写明是在什么系统什么环境下的。从硬件到软件,许多系统的浮点运算都有小问题的。不过像楼主的这个,比较大的可能是,浮点运算结果正好变成 xxx.4999 而不是 xxx.5000 造成的。
    一个解决方法是,你不要直接round到4之前,而是先多round几位,再round。to meizz: 动用RegExp有点太夸张了。
      

  6.   

    不是什么问题,四舍五入 与 四舍六入无成双
    http://blog.joycode.com/ghj/archive/2003/12/18/9474.aspx
      

  7.   

    系统的 toFixed() 确实有BUG的,我测试了一下  0.009.toFixed(2) 结果应该是 0.01 但它只返回了 0.00 ,所以我重写了数字的 toFixed 方法:大家可以测试一下。<SCRIPT LANGUAGE="JavaScript">
    var n = 0.009;
    alert(n +" 系统的函数返回 "+ n.toFixed(2));
    Number.prototype.toFixed = function(d)
    {
        var s=this+"";if(s.indexOf(".")==-1)s+=".";s+=new Array(d+1).join("0");
        if (new RegExp("^((-|\\+)?\\d+(\\.\\d{0,"+ (d+1) +"})?)\\d*$").test(s))
        {
            s="0"+ RegExp.$1, pm=RegExp.$2, a=RegExp.$3.length, b=true;
            if (a==d+2){a=s.match(/\d/g); if (parseInt(a[a.length-1])>4)
            {
                for(var i=a.length-2; i>=0; i--) {a[i] = parseInt(a[i])+1;
                if(a[i]==10){a[i]=0; b=i!=1;} else break;}
            }
            s=a.join("").replace(new RegExp("(\\d+)(\\d{"+d+"})\\d$"),"$1.$2");
        }if(b)s=s.substr(1); return (pm+s).replace(/\.$/, "");} return this+"";
    };alert(n +" meizz的函数返回 "+ n.toFixed(2));
    //-->
    </SCRIPT>
      

  8.   

    toFixed()的定义里面没有提到要四舍五入吧?