码迷,mamicode.com
首页 > Web开发 > 详细

js 小数计算失去精度

时间:2020-03-24 12:59:00      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:bsp   style   常见问题   ber   span   spl   length   精度   this   

原因:小数计算会转化为二进制 精度丢失 

举个例子:4.02*10的N次方 怎么算都是错的; 常见问题 0.1+0.2 !=0.3 。。。

处理:转化为小数进行计算

//加法

function addNum (a,b){
    
     var c,d,e;
    try {
          c = a.toString().split(".")[1].length;
    } catch (f) {
          c = 0;
    }
      try {
          d = b.toString().split(".")[1].length;
    } catch (f) {
          d = 0;
    }
      return e = Math.pow(10,Math.max(c,d)),(multiNum(a,e) + multiNum(b,e)) / e;
}
    
//减法
    
function subNum (a,b) {
    var c,d,e;
    try {
         c = a.toString().split(".")[1].length;
    } catch (f) {
          c = 0;
    }
    try {
        d = b.toString().split(".")[1].length;
    } catch (f) {
        d = 0;
    }
    return e = Math.pow(10,Math.max(c,d)),(multiNum(a,e) - multiNum(b,e)) / e; 
}
//乘法

function multiNum (a,b){
    var c = 0,
    d = a.toString(),
    e = b.toString();
    try {
        c += d.split(".")[1].length;
    } catch (f) { }
    try {
        c += e.split(".")[1].length;
    } catch (f) { }
    return Number(d.replace(".","")) * Number(e.replace(".","")) / Math.pow(10,c);
}

 //除法

function divide (a,b){
    var c,d,e = 0,
    f = 0;
    try {
        e = a.toString().split(".")[1].length;
    } catch (g) { }
    try {
        f = b.toString().split(".")[1].length;
    } catch (g) { }
    return c = Number(a.toString().replace(".","")),d = Number(b.toString().replace(".","")),this.mul(c / d,Math.pow(10,f - e));
}

 

js 小数计算失去精度

标签:bsp   style   常见问题   ber   span   spl   length   精度   this   

原文地址:https://www.cnblogs.com/zui1024/p/12557992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!