美文网首页
javascript 精度丢失问题

javascript 精度丢失问题

作者: 幸宇 | 来源:发表于2021-03-31 11:04 被阅读0次

原因
这和计算机存储机制有关系,在计算机中,存储双精度浮点数的时候,会把十进制转成二进制,再根据计算机存储二进制的规则存储,因为计算机存储时有位数限制,在转二进制的浮点数的时候某些时候会出现无限循环,会造成二进制的四舍五入(0舍1入)从而在二进制再去转十进制的时候就会出现计算误差;

解决方法
理论上利用计算机有限的存储空间来存储无限的小数是不可能保证精确度的,但我们可以处理一下得到我们的期望值:

当你拿到 1.4000000000000001 这样的数据要展示时,建议使用 toPrecision 凑整并 parseFloat 转成数字后再显示,如下:

parseFloat(1.4000000000000001.toPrecision(12)) === 1.4  // True

封装方法:

function strip(num,precision = 12){
  return +parseFloat(num.toPrecision(precision));
}

对于运算类操作,如 +-*/,就不能使用 toPrecision 了。正确的做法是把小数转成整数后再运算。以加法为例:

/**
 * 精确加法
 */
function add(num1, num2) {
  const num1Digits = (num1.toString().split('.')[1] || '').length;
  const num2Digits = (num2.toString().split('.')[1] || '').length;
  const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));
  return (num1 * baseNum + num2 * baseNum) / baseNum;
}

相关文章

  • javascript 精度丢失问题

    原因这和计算机存储机制有关系,在计算机中,存储双精度浮点数的时候,会把十进制转成二进制,再根据计算机存储二进制的规...

  • JavaScript计算丢失精度问题

    js中计算 解决上述问题,找到了一个最简便的方法 https://blog.csdn.net/zf18234031...

  • JavaScript数字精度丢失问题总结

    典型案例 原因 计算机的二进制实现和位数限制有些数无法有限表示。就像一些无理数不能有限表示,如 圆周率 3.141...

  • JavaScript 浮点运算精度问题

    JavaScript 浮点运算精度问题 JavaScript浮点运算存在精度问题,本文阐述问题的产生原因以及解决方...

  • 精度丢失问题

    0.1 + 0.2 !== 0.30000000000000004产生的主要原因是 js通过64位的二进制数据存储...

  • 精度丢失问题

    背景 BFF Client 使用的 npm 包 request-promise-native 请求微服务接口返回 ...

  • 如何修改Spring Boot默认的JSON解析框架

    起因   写这篇文章的起因是源于一次前端JavaScript对于Long类型数据处理的精度丢失问题。这个问题导致我...

  • Javascript中较大整数丢失精度问题

    前言 今天在学习kotlin项目时,发现项目中有一个奇怪的现象。凡是,将ID返回给前端时,都是以String的类型...

  • JavaScript中数字运算精度丢失问题

    取整 js里取整有好几个方法,比如 如果整数位数字很大,这时候利用位操作(慎用)会出现数值溢出,可以用其他方法代替...

  • 2018-11-04-1

    java double计算精度问题 double计算防止精度丢失:方案:将double转成bigDecimalSy...

网友评论

      本文标题:javascript 精度丢失问题

      本文链接:https://www.haomeiwen.com/subject/pmeohltx.html