在js中,0.3000000000000003 > 0.30000000000000022204 返回true
3.3000000000000003 > 3.30000000000000022204 会返回 false,这是为什么????????
在js中,0.3000000000000003 > 0.30000000000000022204 返回true
3.3000000000000003 > 3.30000000000000022204 会返回 false,这是为什么????????
因为数值太小了,js 用的是 ieee754 标准,无法表示全部精度,没有 64 位数字,Javascript Number
https://www.h-schmidt.net/FloatConverter/IEEE754.html
用这个网站可以看到数值在IEEE754下的二进制存储下的数值.我还是给你计算一下, 最近正好在学计算机体系结构
3.3000000000000003
的二进制为11.01001100110011001101
, 我们HD superman给的图并根据IEEE计算浮点数的数值公式:
, 我们把上面的二进制写成
, 由
的指数可得
, 可以得
, 即为阶码(
),
的部分为尾码(
), 并且是正数
,
01000000010100110011001100110011
即使我们得到的IEEE格式浮点数, 再正向推其所表示的浮点数: ,
, 阶码
, 所以其值为
.
同理也可以算出3.30000000000000022204
在计算机中IEEE754浮点格式下为3.29999995232