奇怪的计算
0.1 + 0.2 === 0.3
//false
0.1 + 0.2 == 0.3
//false
0.3 / 0.1
//2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
//false复制代码
按照正常的想法,上面的输出都是有问题的.
如果0.1+0.2
不等于0.3
,那么等于什么呢?
//0.30000000000000004
复制代码
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1
与1.0
是相同的,是同一个数
那么上面的结果是怎么来的呢?
数值精度
精度范围-(2^53-1)~(2^53-1)
数值范围
2^1024~2^(-1023)
最大值
Number.MAX_VALUE
//1.7976931348623157e+308复制代码
最小值
Number.MIN_VALUE
//5e-324
复制代码
数值的表示
十进制,十六进制,科学计数法.
下面两种情况会自动转化为科学计数法
- 总位数超过21位
1234567890123456789012
//1.2345678901234568e+21
123456789012345678901
//123456789012345680000复制代码
- 小数点后面至少有6位0
0.0000003
//3e-7
0.000003
//0.000003复制代码
进制
- 十进制:没有前导0的数值。
- 八进制:有前缀
0o
或0O
的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。- 十六进制:有前缀
0x
或0X
的数值。- 二进制:有前缀
0b
或0B
的数值
默认会都转化为十进制
特殊值
+0 -0,默认是相等的.
1/0
//Infinity
1/-0
//-Infinity复制代码
NaN,表示“非数字”(Not a Number)
出现的场合
- 字符串解析出错
5 - 'x'
//NaN
复制代码
- 数学函数运算
Math.log(-1)
//NaN复制代码
- 0/0