javascript的加减乘除结果会有偏差,在两个浮点数相加的时候会比较明显。如下函数返回较为精确的计算结果

加法函数(返回值:arg1加arg2的精确结果  )javascript

function accAdd (arg1, arg2) {
  var r1, r2, m, c
  try {
    r1 = arg1.toString().split('.')[1].length
  } catch (e) {
    r1 = 0
  }
  try {
    r2 = arg2.toString().split('.')[1].length
  } catch (e) {
    r2 = 0
  }
  c = Math.abs(r1 - r2)
  m = Math.pow(10, Math.max(r1, r2))
  if (c > 0) {
    var cm = Math.pow(10, c)
    if (r1 > r2) {
      arg1 = Number(arg1.toString().replace('.', ''))
      arg2 = Number(arg2.toString().replace('.', '')) * cm
    } else {
      arg1 = Number(arg1.toString().replace('.', '')) * cm
      arg2 = Number(arg2.toString().replace('.', ''))
    }
  } else {
    arg1 = Number(arg1.toString().replace('.', ''))
    arg2 = Number(arg2.toString().replace('.', ''))
  }
  return (arg1 + arg2) / m
}

减法函数(返回值:arg1减arg2的精确结果  java

function accSub (arg1, arg2) {
  var r1, r2, m, n
  try {
    r1 = arg1.toString().split('.')[1].length
  } catch (e) {
    r1 = 0
  }
  try {
    r2 = arg2.toString().split('.')[1].length
  } catch (e) {
    r2 = 0
  }
  m = Math.pow(10, Math.max(r1, r2)) // last modify by deeka //动态控制精度长度
  n = (r1 >= r2) ? r1 : r2
  return ((arg1 * m - arg2 * m) / m).toFixed(n)
}

乘法函数(返回值:arg1乘以arg2的精确结果 函数

 

function accMul (arg1, arg2) {
  var m = 0
  var s1 = arg1.toString()
  var s2 = arg2.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)
}

 

除法函数(返回值:arg1除以arg2的精确结果 spa

 

    function accDiv(arg1,arg2)  
    {  
      var t1=0,t2=0,r1,r2;  
      try  
      {  
         t1=arg1.toString().split(".")[1].length  
      }  
      catch(e)  
      {}  
      try  
      {  
         t2=arg2.toString().split(".")[1].length  
      }  
      catch(e)  
      {}  
      with(Math)  
      {  
         r1=Number(arg1.toString().replace(".",""))  
         r2=Number(arg2.toString().replace(".",""))  
         return (r1/r2)*pow(10,t2-t1);  
      }  
    }
相关文章
相关标签/搜索