程序谷 认真生活 享受生活

JS计算精度丢失

⚠️ 本文最后更新于2023年11月15日,已经过了626天没有更新,若内容或图片失效,请留言反馈
图片描述
/**
 * 四则运算
 * @param {*} val1 数1
 * @param {*} val2 数2
 * @param {*} t 四则,默认是0,0加,1减,2乘,3除
 * @returns 计算结果,非法为NaN
 */
export function calculate(val1, val2, t) {
  var type = t || 0
  var result = 0
  if (isNaN(parseFloat(val1))) {
    return NaN
  }
  if (isNaN(parseFloat(val2))) {
    return NaN
  }
  if (!(type == 0 || type == 1 || type == 2 || type == 3)) {
    return NaN
  }
  if (type == 3 && val2 == 0) {
    return NaN
  }
  var len1 = val1.toString().length - val1.toString().indexOf(".") - 1;
  var len2 = val2.toString().length - val2.toString().indexOf(".") - 1;
  var p = Math.max(len1, len2);
  if (type == 3) {
    // 避免最终求出结果的长度大于最大长度的时候导致精度丢失 开启下面
    p += p - Math.min(len1, len2);
  }
  var float = Math.pow(10, p);
  if (type == 0) {
    result = ((val1 * float) + (val2 * float)) / float
  } else if (type == 1) {
    result = ((val1 * float) - (val2 * float)) / float
  } else if (type == 2) {
    result = ((val1 * float) * (val2 * float)) / (float * float)
  } else if (type == 3) {
    result = (val1 * float) / (val2 * float)
  }
  return result
}
By 大芃展翅 On
此页面评论区已关闭
程序谷 |  蜀ICP备2020031553号-1