js浮点数运算出现误差解决方案

Posted 枫叶布

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js浮点数运算出现误差解决方案相关的知识,希望对你有一定的参考价值。

1.数据展示类(使用 toPrecision 凑整并 parseFloat 转成数字后再显示)

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

封装成方法如下:

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

2.数据运算类(对于运算类操作,如 +-*/,就不能使用 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; 
}  

 

以上是关于js浮点数运算出现误差解决方案的主要内容,如果未能解决你的问题,请参考以下文章

js浮点数精度误差问题,解决方法

js浮点数运算封装, 起因财务部分精确计算

为何js计算带有小数的加法的时候会出现误差?

接单日记:理解浮点数运算的误差

为何js计算带有小数的加法的时候会出现误差?

JS 乘法运算出现了浮点,该怎么解决