美文网首页让前端飞WEB前端程序开发微信小程序开发
关于JS的浮点数计算精度问题解决方案

关于JS的浮点数计算精度问题解决方案

作者: honey缘木鱼 | 来源:发表于2018-09-12 18:09 被阅读5次

由于接触JS不久,关于JS的浮点数的计算更是之前没有用过,这次写JS项目发现的这个问题:0.1+0.2=0.3000000000004,为什么会出现这么奇怪的问题呢 ?在网上找了一些资料,JS作为解释性语言,直接计算会有浮点数精度丢失问题。 门弱类型语言的JavaScript ,从设计思想上就没有对浮点数有个严格的数据类型。

解决方案:
一. 有种最简单的解决方案,就是给出明确的精度要求,在返回值的过程中,计算机会自动四舍五入,比如:

var numA = 0.1; 
var numB = 0.2; 
alert( parseFloat((numA + numB).toFixed(2)) === 0.3 );

用这种方法在测试过程中也有问题,例如6.8-0.4打印为6.3,本应为6.4所以这里转换结果还是不正确。
在浮点数计算的时候,很多时候产生的都是这种极限数据,如果要精确进行整数转换,要放大的倍数过大。这里我们可以用四舍五入对转换的过程进行优化:

Math.round((6.8-0.9)*10);//四舍五入
59

优化之后的自定义函数:

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);

因此,为了避免产生精度差异,我们要把需要计算的数字乘以 10 的 n 次幂,换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂,大部分编程语言都是这样处理精度差异的,我们就借用过来处理一下 JS 中的浮点数精度误差。

相关文章

  • js精度问题

    关于js浮点数计算精度不准确问题的解决办法 今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一...

  • 关于JS的浮点数计算精度问题解决方案

    由于接触JS不久,关于JS的浮点数的计算更是之前没有用过,这次写JS项目发现的这个问题:0.1+0.2=0.300...

  • js 处理四则运算失去精度问题

    js 处理四则运算失去精度问题 计算精度,特别是浮点数计算。举个栗子 然后我寻求各种解决办法,其中用了lodash...

  • js浮点数计算精度问题案例及解决方案

    在项目中计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前一碰到这个问题就用tofixed方法进行处理一...

  • 备忘

    1、js中解决数字计算精度问题,math.js bignumber. math.js https://blog.c...

  • JS浮点数计算精度

    JS的浮点数,计算都是会有问题的。下面给出加减乘除的解决办法 131.20*100 = 13119.999999 ...

  • 浮点数计算精度问题

    产生的原因 计算机在进行运算时是将数值转为二进制后计算,我们可以通过num.toString(2)这个方法查看转为...

  • js浮点运算

    前言 在项目开发过程中发现浮点数的运算会出现精度问题,尤其是乘除运算。产生浮点数计算精度不准确的原因: 在计算机角...

  • Java浮点数计算精度问题总结

    Java浮点数计算精度问题总结 首先看看下面几个简单的加法计算的输出结果:System.out.println(0...

  • iOS 浮点数的精确计算和四舍五入问题

    iOS开发中,使用浮点数(float,double)类型运算需要注意计算精度的问题。即使只是两位小数,也会出现误差...

网友评论

    本文标题:关于JS的浮点数计算精度问题解决方案

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