前端面试题 - 为什么在JS中0.1+0.2!=0.3?以及IEE 754标准
JavaScript使用Number类型表示数字(整数和浮点数),遵循 IEEE 754 标准 通过64位来表示一个数字。
首先,计算机无法直接对十进制的数字进行运算,这是硬件物理特性已经决定的。这样运算就分成了两个部分: 先按照IEEE 754转成相应的二进制,然后按照二进制运算。
回到0.1+0.2的例子上,首先转成二进制后,二进制数字是无限循环的,但是由于IEEE 754尾数位数限制, 需要将后面多余的位截掉,这样在进制之间的转换中精度已经损失。
由于指数位数不相同,运算时需要对阶运算 这部分也可能产生精度损失,两步的精度损失最后的结果转换成十进制之后就是0.30000000000000004。
只要是遵循遵循 IEEE 754 标准的语言都会有这个问题。
通俗易懂的前端面试题网站: https://www.front-interview.com