本帖最后由 antfoottuwei 于 2013-10-19 17:05:39 编辑

解决方案 »

  1.   

    看一下浮点数在内存当中是如何存储的便知道了 http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
      

  2.   

    十进制0.1    
     => 二进制0.00011001100110011…(循环0011)     
     =>尾数为1.1001100110011001100…1100(共52位,除了小数点左边的1),指数为-4(二进制移码为00000000010),符号位为0    
     => 计算机存储为:0 00000000100 10011001100110011…11001    
     => 因为尾数最多52位,所以实际存储的值为0.00011001100110011001100110011001100110011001100110011001    
     而十进制0.2    
     => 二进制0.0011001100110011…(循环0011)    
     =>尾数为1.1001100110011001100…1100(共52位,除了小数点左边的1),指数为-3(二进制移码为00000000011),符号位为0    
     => 存储为:0 00000000011 10011001100110011…11001    
     因为尾数最多52位,所以实际存储的值为0.00110011001100110011001100110011001100110011001100110011    
     那么两者相加得:        
     0.00011001100110011001100110011001100110011001100110011001    
    +  0.00110011001100110011001100110011001100110011001100110011  
     =  0.01001100110011001100110011001100110011001100110011001100    
     转换成10进制之后得到:0.30000000000000004  
      

  3.   


    明白了,感谢。之前还纠结的是分明是14.000000000002之类的,alert出来的一直是0.14,用toFixed(20)一看才知道,浏览器给我自动四舍五入才显示了……