【前端篇】关于JS中计算float类型精准度问题的解决方案

前言:在工作的项目中遇到了js的计算精准度问题,正好解决的,特此记录一下,方便和我一样遇到这个问题的同学!

 为什么会出现精准度计算的问题?

JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题。

网上的几种精准度计算的答案列举出来:

var num1 = 0.1; 
var num2 = 0.2; 
alert( num1+numB );//等于0.30000000000000004
  1. 把需要计算的数字乘以 10 的 n 次幂,换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂,大部分编程语言都是这样处理精度差异的,我们就借用过来处理一下 JS 中的浮点数精度误差。推荐

    var num1 = 0.1; 
    var num2 = 0.2;
    var c=0.1+0.2;//0.30000000000000004
    var m = Math.pow(10, 1); //10的1次幂
    var sum=parseInt(c*m,10)/m;//0.3

     

  2. 通过四舍五入的方式去获取,不过这样的话不是特别的灵活,特别是在金额的计算上面

    var num1 = 0.1; 
    var num2 = 0.2; 
    var sum=parseFloat((num1 + num2).toFixed(2))// 0.30

     

  3. 讲float类型先转换成int类型,然后在转换为float类型

    var num1 = 0.1; 
    var num2 = 0.2; 
    var sum=(num1*10+num2*10)/10;//0.3

     

  4. 自己写的一个通过Math.round()进行的计算                                                                                                                               (可把一个数字舍入为最接近的整数。例如,3.5 将舍入为 4,而 -3.5 将舍入为 -3。)

    var num1 = 0.1; 
    var num2 = 0.2; 
    var c=Math.round((num1+num2)* 1000)/1000;//0.3,如果结果大于0.5的时候就会四舍五入

     

 

你可能感兴趣的:(前端)