JavaScript解决浮点数算数运算精度问题

快乐打工仔 分类:实例代码

JavaScript解决浮点数算数运算精度问题属于前端实例代码,有关更多实例代码大家可以查看

JavaScript浮点数进行算数运算可能会产生误差,下面就简单介绍一下如何避免误差的出现。

首先看一段代码实例:

let a=0.1;
let  b=0.2;
console.log((a+b)==0.3);

以上代码看起来返回值为true应该是毫无疑问的,但是事实恰好相反。

计算机真正读懂的是二进制数字而不是十进制数字,所以一切算数运算最后都要转换为二进制数字。

console.log((0.1).toString(2));
console.log((0.2).toString(2));

上面是转换为二进制的代码,其实输出结果被截断了,因为双精度浮点数的小数部分最多支持 52 位,两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。当然c#和java这样的语言应该也有这样的问题,只是它们进行了相关的封装,所以编程人员就无需担忧了。

解决方案:

既然浮点数计算可能出现问题,那么就将浮点数转换为整数,然后再进行相关操作就可以了。

代码如下:

var a=0.1;
var b=0.2;
console.log((a*10+b*10)/10==0.3);

以上代码实现了我们的要求,也诠释了解决的原理。下面是一个通用代码:

Math.formatFloat=function(f,digit){ 
  var m=Math.pow(10,digit); 
  return parseInt(f*m,10)/m; 
} 
var a=0.1;
var b=0.2;
console.log(Math.formatFloat(a+b,1)==0.3);

JavaScript解决浮点数算数运算精度问题,这样的场景在实际项目中还是用的比较多的,关于JavaScript解决浮点数算数运算精度问题就介绍到这了。

回复

我来回复
  • 暂无回复内容