JavaScript学习笔记---数值

221 阅读1分钟

奇怪的计算

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位浮点数形式储存,即使整数也是如此。所以,11.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的数值。
  • 八进制:有前缀0o0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
  • 十六进制:有前缀0x0X的数值。
  • 二进制:有前缀0b0B的数值

默认会都转化为十进制

特殊值

+0 -0,默认是相等的.

1/0
//Infinity

1/-0
//-Infinity

NaN,表示“非数字”(Not a Number)

出现的场合

  • 字符串解析出错

5 - 'x'
//NaN

  • 数学函数运算

Math.log(-1)
//NaN

  • 0/0