移动端小数计算不正确问题

移动端小数计算不正确问题

最近在做小程序迭代版本出现了一些新的问题:

  • 小数计算问题

由于显示1的时候其实并不是1而是1.0000几几几,所以加减是会出问题,比如我们的折扣价格是199.00,后台传的是原价和折扣,计算就会出问题


解:(下面是网搜的解决方案)

function decNum(a) {/*获取小数位数*/
  var r = 0;
  a = a.toString();
  if (a.indexOf(".") !== -1) r = a.split(".")[1].length;
  return r;
}
function int(a) {/*去除小数点并转成数值*/
  return parseInt(a.toString().replace(".", ""));
}
function calc(a, b, type) {//加减乘除
  var r,
    da = decNum(a),
    db = decNum(b),
    dsum = da + db,
    dmin = Math.min(da, db),
    dmax = Math.max(da, db);
  dsum += dmax - dmin;
  dsum = Math.pow(10, dsum);
  dmax = Math.pow(10, dmax);
  a = int(a);
  b = int(b);
  if (da > db) {
    b *= Math.pow(10, da - db);
  } else {
    a *= Math.pow(10, db - da);
  }
  switch (type) {
    case "add":
      r = (a + b) / dmax;
      break;
    case "subtract":
      r = (a - b) / dmax;
      break;
    case "multiply":
      r = (a * b) / dsum;
      break;
    case "divide":
      r = a / b;
      break;
  }
  return r;
}
calc(a, b, type)//自己可以试试

猜你喜欢

转载自blog.csdn.net/cx091/article/details/79636542