<HTML>
 <HEAD>
  <script>
  function doi()
  {
    var i  =  document.getElementById("aaa").value;
/// var i =53643.1;
     alert((i/10000));
  }
 
  </script>
 </HEAD> <BODY onload="doi();">
  <input id="aaa" type="text"  value="1223840.94"/>
 </BODY>
</HTML>弹出框的值 有问题!
假如 把 value="1223840.94" 改成 带一位小数的 就没问题!
用parseFloat还是不行
如果改成  alert(i*1000/10000000); 就没问题了!
什么原因啊??

解决方案 »

  1.   


    <script>
      function doi()
      {
        var i = 11456.98
        document.write("除以1000结果:"+i/1000);
    document.write("<br />");
    document.write("除以10000结果:"+i/10000);
      }
     
      </script>结果是如下:
    除以1000结果:11.45698
    除以10000结果:1.1456979999999998请高手们说说原因!
      

  2.   

    我想要的结果是 
    除以10000结果:1.145698 不明白是:浮点数的运算有bug,为什么除以1000结果正常。
              而除以10000就不正常了?我跟网上也找到了 解决方法,但是不明白为什么计算不正常?
      

  3.   


    这是关于精度的问题,当改成带一位小数时,value是float型,结果而如果是两位小数则为double型,问题就出在如果表达中有一个
    double类型,结果就会用Double类型表示,除以10000结果:1.1456979999999998就属于这种情况. 
      

  4.   

    还有一种解释,比如java语言无法精确的表示0.1,所以只能用0.099998来取代.我认为jsp中也一样!
      

  5.   

    float和double就是有误差的,js和java都是如此
      

  6.   

     浮点运算可能导致舍入误差,产生的结果接近 — 但不等于 — 您可能希望的结果。例如,
    下面这个简单的计算将得到 2.000000000000004,而不是 2.0:
    var s=0;
      for (var i=0; i<20; i++)
        s += 0.1
          alert(s);
    类似的,0.1*26 相乘所产生的结果不等于 0.1 自身加 26 次所得到的结果。
    当将浮点数转换成整数时,产生的舍入误差甚至更严重,甚至对于那些”看上去似乎“应该得到整数值的计算,也存在此类问题。例如,下面这些语句:
     var d = 29.0 * 0.01;
      alert(d);
      alert(d * 100);
      将得到以下输出:
      0.29
      28.999999999999996
      
      
     
        
      这可能不是您起初所期望的。
      

  7.   

    这个应该是js的一个bug,网上有一些针对这种情况写的专用算法,楼主可以搜一下。
    另外,如果想得到制定精度的数值,可以这样用:
    如果要保留三位则:Math.round(rs*1000)/1000; 
    如果要保留四位则:Math.round(rs*10000)/10000;.....以次类推 
      

  8.   


      <script>
     //除法函数,用来得到精确的除法结果 
    //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 
    //调用:accDiv(arg1,arg2) 
    //返回值:arg1除以arg2的精确结果 
    function accDiv(arg1,arg2){ 
        var t1=0,t2=0,r1,r2; 
        try{t1=arg1.toString().split(".")[1].length}catch(e){} 
        try{t2=arg2.toString().split(".")[1].length}catch(e){} 
        with(Math){ 
            r1=Number(arg1.toString().replace(".","")) 
            r2=Number(arg2.toString().replace(".","")) 
            return (r1/r2)*pow(10,t2-t1); 
        } 
    } //给Number类型增加一个div方法,调用起来更加方便。 
    Number.prototype.div = function (arg){ 
        return accDiv(this, arg); 
    } function doi()
    {
      alert(accDiv(678.123,1000));
    }
    </script>上面是跟网上搜到的浮点除法计算!但是还是解决不了我的问题!
    如果将红色的1000改成10000 就有是那种误差的结果。难道对于10000 JS 不会算了?