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);  
      }  
    }
相關文章
相關標籤/搜索