JavaScript中关于数字计算精度丢失问题的处理

/**
 * @description 适用加法和减法,如果是加法就传正数,如果是减法就传负值
 * @return {*} 返回值
 * @param { Number } n1  数字1
 * @param { Number } n2  数字2
 */
export function addAndSubtract(n1, n2) {
  let r1, r2, m
  try {
    r1 = n1.toString().split('.')[1].length
  } catch (e) {
    r1 = 0
  }
  try {
    r2 = n2.toString().split('.')[1].length
  } catch (e) {
    r2 = 0
  }

  m = Math.pow(10, Math.max(r1, r2))
  return (n1 * m + n2 * m) / m
}


/**
 * @description 乘法
 * @return {*} 返回值
 * @param { Number}  n1 数字1
 * @param { Number}  n2 数字2
 */
function multiplication(n1, n2) {
  let m = 0,
    s1 = n1.toString(),
    s2 = n2.toString();
  try {
    m += s1.split(".")[1].length;
  } catch (e) {}
  try {
    m += s2.split(".")[1].length;
  } catch (e) {}
  return (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) / Math.pow(10, m);
}



/**
 * @description 除法
 * @return {*} 返回值
 * @param { Number } n1 数字1
 * @param { Number } n2 数字2
 */
function divisionMethod(n1, n2) {
  let t1 = 0,
    t2 = 0,
    r1,
    r2;
  try {
    t1 = n1.toString().split(".")[1].length;
  } catch (e) {}
  try {
    t2 = n2.toString().split(".")[1].length;
  } catch (e) {}
  r1 = Number(n1.toString().replace(".", ""));
  r2 = Number(n2.toString().replace(".", ""));
  return (r1 / r2) * Math.pow(10, t2 - t1);
}

自己在工作过程中,遇到了关于计算精度的问题,查找网上的一些帖子,自己总结了一下,方便自己查找使用

借鉴地址 博客园-行果 ,点击即可查看

你可能感兴趣的:(vue,html,js,vue.js,ui,javascript)