JAVA、PHP、前端、APP、网站开发 - 开发技术学习

开发技术学习 » 前端设计 » js计算精度解决办法

js计算精度解决办法

此文被围观3545 日期: 2011-04-14 分类 : 前端设计  标签:  ··

js计算精度解决办法,这个问题一般出在计算产品数量和价格的和,如果是integer类型那么就会出现小数位不在计算内!所以要改成float类型 提供一个js类 

 // JavaScript Document 

 function arithmetic(a, sign, b){ 
     if(isNaN(a) || isNaN(b)) return ;
     if (a == null || a == '') a = 0; 
     if (b == null || b == '') b = 0; 
     if(a.toString().indexOf(".") < 0 && b.toString().indexOf(".") < 0) return eval(a + sign + b); 
     var ra = a.toString().replace(' ', ''); 
     var rb = b.toString().replace(' ', ''); 
     var arr_a = ra.split("."); 
     var arr_b = rb.split("."); 
     var digit_a = (arr_a.length > 1) ? arr_a[1].length : 0; 
     var digit_b = (arr_b.length > 1) ? arr_b[1].length : 0; 
     var size = (digit_a > digit_b ? digit_a : digit_b); 
     var tmp_a = ra.replace('.', ''); 
     var tmp_b = rb.replace('.', ''); 
     var int_a; 
     var int_b; 
     if(size == digit_a) {
         int_a = Number(tmp_a); 
     }else{
         for(var i = 0; i < (size - digit_a); i++) { tmp_a += '0'; } 
         int_a = Number(tmp_a);
     } 
     if(size == digit_b) {
         int_b = Number(tmp_b); 
     }else{ 
         for(var i = 0; i < (size - digit_b); i++) { tmp_b += '0'; } 
         int_b = Number(tmp_b); 
     } 
     var mul; 
     switch(sign){ 
         case "+": mul = size; break; 
         case "-": mul = size; break; 
         case "*": mul = 2 * size; break; 
     } 
     if (sign == '/'){
         var int_result = eval(int_a + sign + int_b); 
     }else{
         var int_result = eval(int_a + sign + int_b) / Math.pow(10, mul); 
     }
     return (int_result); 
  } 
  var result = arithmetic(10,'/',2);//计算10除以2 注意一点就是获取值的时候用不着parseFloat不要用parseInt.


roFixed(x)是定小数点后位数的方法,一定程度上是有作用的,建议加上

站点声明:部分内容源自互联网,为传播信息之用,如有侵权,请联系我们删除。

© Copyright 2011-2024 www.kfju.com. All Rights Reserved.
超级字帖 版权所有。 蜀ICP备12031064号      川公网安备51162302000234