不老实的Number类型

为什么说Number类型不老实呢,相信大家都多多少少的在开发中遇到过小数计算不精确的问题,比如0.1+0.2!==0.3 、0.1 + 0.7 !==0.8等,下面我们来追本溯源,看看为什么会出现这种现象,以及该如何避免。

精度丢失

计算机中所有的数据都是以二进制存储的,所以在计算时计算机要把数据先转换成二进制进行计算,然后在把计算结果转换成十进制。

但在计算0.1+0.2时,二进制计算发生了精度丢失,导致再转换成十进制后和预计的结果不符。

对结果的分析—更多的问题

0.1和0.2的二进制都是以1100无限循环的小数,下面逐个来看JS帮我们计算所得的结果:

0.1的二进制:

0.0001100110011001100110011001100110011001100110011001101

0.2的二进制:

0.001100110011001100110011001100110011001100110011001101

理论上讲,由上面的结果相加应该::

0.0100110011001100110011001100110011001100110011001100111

实际JS计算得到的0.1+0.2的二进制

0.0100110011001100110011001100110011001100110011001101

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容