<script>
alert((1-0.2111).toFixed(4));
</script>

解决方案 »

  1.   

    关于转换小数位数,参见:<script language=JavaScript>
    function tofloat(f,dec) { 
    if(dec<0) return "Error:dec<0!"; 
    result=parseInt(f)+(dec==0?"":"."); 
    f-=parseInt(f); 
    if(f==0) 
    for(i=0;i<dec;i++) result+='0'; 
    else { 
    for(i=0;i<dec;i++) f*=10; 
    result+=parseInt(Math.round(f)); 

    return result; 

    alert(tofloat(11.20000000000000000001,5))
    </script>
      

  2.   

    toFixed在IE5.0下是不能使用的.
    孟子.能不能告诉我在什么情况下会出现这样的问题.
    我没有必要把所有的运算都套上你的函数吧?
      

  3.   

    孟子,我要是这么用你的函数tofloat(1-0.2111,4)
    是不是在0.7889999999...的基础上取整数的.
    那样会不会出现数据精度丢失的情况.(代码有些地方还看不懂)
      

  4.   

    谁能告诉我什么情况下会发生这样的问题?
    另祝JAVASCRIPT论坛的各位中秋节快乐!!!
      

  5.   

    <script>
    alert(qswhAdd(1,-0.2111))
    function qswhAdd(n1,n2){
    var r1,r2,m;
    try{r1=n1.toString().split(".")[1].length}catch(e){r1=0}
    try{r2=n2.toString().split(".")[1].length}catch(e){r2=0}
    m=Math.pow(10,Math.max(r1,r2))
    return (n1*m+n2*m)/m
    }
    </script>
      

  6.   

    qiuliang1979(qiuliang) 
    运算的时候不知道小数点后面会有几位的.
    1和0.2111只是我举的一个例子.
    net_lover(孟子E章)  &&  qiushuiwuhen(秋水无恨) 
    是不是说加减乘除都有可能碰到这样的问题,
    那样就惨了
    比如下面的公式,每次运算都要调用一次,那不累死了.
    (1-(eval(l_a)-eval(l_b))/eval(l_a)) + (eval(d) - eval(f)) +...
      

  7.   

    具体问题具体分析,上面简写为
    a(s(1,d(s(l_a,l_b),l_a)),s(d,f))
    只要写好函数a() s() d() m()
      

  8.   

    我执行的结果是
    0.78889999999,不是
    0.7889999999!(少了一个 8)1-0.2111 = 0.7889
    因此 0.78889999999 是很精确的了,只是对于人类,显得很“难看”
    如果想“系统地”解决这个问题,又不能用 toFixed,不妨写个通用的 roundToN() 函数,
    将浮点数圆整到小数点后 N 位,以“掩盖”计算误差:function roundToN(x)
    {
        var K = 10;
    for ( var i = 0; i < N; i ++ ) K *= 10;
    x *= K;
    x = Math.round(x);
    return x / K;
    }var x = roundToN(1 - 0.2111);
    var s = "" + x;
      

  9.   

    忘了加参数:function roundToN(x, N)
    {
        var K = 10;
        for ( var i = 0; i < N; i ++ )
            K *= 10;        // K = 10^N
        x *= K;             // 放大 K 倍
        x = Math.round(x);  // 整数圆整
        return x / K;       // 缩小 K 倍
    }var x = roundToN(1 - 0.2111, 4);
    var s = "" + x;
      

  10.   

    嗨,上面还有问题(拨号上网,太匆忙,不好意思):
    N=0 => 0.2
    N=1 => 0.21
    ...
    N=3 => 0.2111改成function roundToN(x, N)
    {
        var K = 1;
        for ( var i = 0; i < N; i ++ )
            K *= 10;        // K = 10^N
        x *= K;             // 放大 K 倍
        x = Math.round(x);  // 整数圆整
        return x / K;       // 缩小 K 倍
    }var x = roundToN(1 - 0.2111, 4);
    var s = "" + x;N 的定义:
    N=1 => 0.2
    N=2 => 0.21
    ...
    N=4 => 0.2111