深入解析1+1不等于2

·  阅读 482

0.1 + 0.2

实际运行起来的结果如下:

image.png

计算机对数值的表示

目前的计算机只能存01,对于数的表示是通过不同位置的01来表示这个数的不同部分,比如符号位,整数部分和小数部分。目前所有以二进制为基础的计算机对于数的表示都是通过简单来解释复杂的含义。

对于 Number 对象,toString() 方法以指定的基数返回该对象的字符串表示。

0.1.toString(2) 结果为:'0.0001100110011001100110011001100110011001100110011001101'

0.2.toString(2) 结果为: '0.001100110011001100110011001100110011001100110011001101'

js执行上述代码返回的结果有点令人费解,还有一个.符号。

IEE754

image.png 以32位浮点数为例,如果由于需要某些运算,截取了一些表示这个数的一些位,就会丢失一些信息,造成计算的不准确。

0.1 + 0.2的计算过程

JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数。

上面的说法比较笼统,我们把计算过程解析出来就会比较明确了。

js中所有数值都是64位浮点数。 image.png

分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改