3.3000000000000003 > 3.30000000000000022204 是true还是false?

在js中,0.3000000000000003 > 0.30000000000000022204 返回true

3.3000000000000003 > 3.30000000000000022204 会返回 false,这是为什么????????

javascript
106 views
Comments
登录后评论
Sign In
·

0.3000000000000003 > 0.30000000000000022204 =>true

1.3000000000000003 > 1.30000000000000022204 =>false

2.3000000000000003 > 2.30000000000000022204 =>false

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计算浮点数的数值公式:

math, 我们把上面的二进制写成 math, 由math 的指数可得math, 可以得math, 即为阶码(math), math的部分为尾码(math), 并且是正数math, 01000000010100110011001100110011即使我们得到的IEEE格式浮点数, 再正向推其所表示的浮点数: math, math, 阶码math, 所以其值为math.

同理也可以算出3.30000000000000022204在计算机中IEEE754浮点格式下为3.29999995232