zoukankan      html  css  js  c++  java
  • 浮点数精度失准

    js中进行数字计算时候,会出现精度误差的问题。先来看一个实例:

    console.log(0.1+0.2===0.3);//false

    console.log(0.1+0.1===0.2);//true

    上面第一个的输出会超出我们的常识,正常应该为true,这里为什么会是false呢,直接运行会发现0.1+0.2在js中计算的结果是:

    console.log(0.1+0.2);//输出0.30000000000000004

    浮点数产生的原因

    我们首先就想到计算机能读懂的是二进制,所以我们进行运算的时候,实际上是把数字转换为了二进制进行的,所以我们把0.1和0.2转换为二进制:

    0.1 => 0.0001 1001 1001 1001..(无限循环)

    0.2 => 0.0011 0011 0011 0011…(无限循环)

    这里可以看出转换为二进制是一个无限循环的数字,单在计算机中对于无限循环的数字会进行舍入处理的,进行双精度浮点数的小数部分最多支持52位。然后把两个2进制的数进行运算得出的也是一个二进制数值,最后再把它转换为十进制。保留17位小数,所以0.1+0.2的值就成了 0.30000000000000004。 0.1+0.1的值成了0.20000000000000000,全是0的时候可以省略,就成了0.2

    解决浮点数精度误差的办法

    export function strip(num, precision = 12) {
        if (!num) {
            return 0;
        }
        return +parseFloat(parseFloat(num).toPrecision(precision));
    }
    
  • 相关阅读:
    2019年8月16日_实验室学术论文研讨
    2019年8月2日实验室学术研讨会议
    2019年7月26日实验室学术研讨会议
    2019年7月12日实验室开展学术研讨
    hdu 5547
    hdu 1286
    hdu 1272
    hdu 1213
    poj 2533 LIS(最长上升序列)
    HUD 5773 LIS(最长上升序列)
  • 原文地址:https://www.cnblogs.com/qianyy/p/13631077.html
Copyright © 2011-2022 走看看