一, javascript
中的数值
1.在js
中,数值只有整数,浮点数和 NAN
2.我们不仅可以使用十进制来表示数字,也可以使用进制来声明一个数字
(1)二进制 (添加0b
前缀),
(2)八进制 (添加0o
前缀)
(3)十六进制(添加0x
前缀)
{
let n=10; //十进制
console.log(n===0b1010 )// 10的二进制表示形式,true
console.log(n===0o12) //10的八进制表示形式,true
console.log(n===0xA) //10的十六进制表示形式,true
}
二,javascript
中浮点数运算的精度问题
1.在计算机中,数值是使用二进制表示的,对于浮点数的表示,遵循IEEE 754标准,采用双精度存储(double precision)64位。
2.浮点数转二进制的算法如下,以浮点数0.1
为例当保留6位时为(0.000110
)。
将浮点数*2,逢1取1,逢0取0,直到乘积为1。由于这种算法,可以看出不是所有的浮点数都能准确的表示,因此,对于某些浮点数的运算存在精度问题。
{
0.1 * 2
0.2 0
--------
0.2 * 2
0.4 0
--------
0.4 * 2
0.8 0
--------
0.8 * 2
1.6 1
--------
0.6 * 2
1.2 1
--------
0.2 * 2
0.4 0 //之后不会得到乘积等于1的情况
--------
}
3.运算后浮点数的比较:对于(0.1+0.2==0.3)
返回的结果是false
,原因就是浮点数运算的精度问题。
4.js
提供Number.EPSILON
来比较运算后的浮点数,将运算后浮点数相减小于Number.EPSILON
则可认为相等: (0.1 + 0.2 - 0.3 <Number.EPSILON)
返回true
。
三,Number
对象:原始数值的包装对象
1.Number
是原始数值的包装对象,类似的还有String
,Boolean
等基本类型的包装对象。
2.在必要时,JavaScript
会自动地在原始数据和包装对象之间转换。
2.Number
构造函数使用方法
(1)使用new
来创建一个Number
实例对象。
let n = new Number(10)
(2)直接调用Number
构造函数,将传入的参数转化为原始数值类型,若不是原始数值类型返回NaN
。注意返回的是原始数值类型,而不是Number
实例对象。
let n = Number('10')
console.log(n) // 10
Number() // 0
Number(true) // 1
Number(false) // 0
Number(null) // 0
Number(undefined) // NaN
Number('ff') //NaN
Number([]) // 0
Number('') // 0
Number(1+'2') // 12
3.Number
构造函数的常见静态属性
Number.MAX_VALUE
:可表示的最大值Number.MIN_VALUE
:可表示的最小的数Number.NaN
:非数字值NEGATIVE_INFINITY
:负无穷大,溢出时返回该值。POSITIVE_INFINITY
:正无穷大,溢出时返回该值。
4.Number
实例对象的实例方法
toString(radix)
:将数值转化为字符串,radix
为指定的基数(2-36),默认是10,表示十进制数。
let n = new Number(12)
n.toString() // '12'
n.toString(8) // '14'
n.toString(16) // 'c'
valueOf()
:返回Number
实例对象的原始数值。
let n = new Number(12)
n.valueOf() // 12
toFixed(num)
:可把 浮点数四舍五入为指定小数位数的数字,返回的类型是一个字符串。
let n = new Number(12.02)
console.log(n.toFixed(1)) //12.0