前言
程序中主要是对数据的操作,而明白数值,才可以更好的对数据操作。
通过这篇文章,你会对javascript中的数字原理
进行更深入的了解。
1.数字
深入理解数字的基础:
javascript
数字类型是通过IEEE 754 标准来实现的。
2.数字的语法
数字值可以调用Number中的prototype()中的方法,例如:toFixed()
、toPrecision()
var a = 42.6;
console.log(a.toFixed(1));//42.6
console.log(a.toFixed(2));//42.60
console.log(a.toFixed(3));//42.600
console.log(a.toFixed(4));//42.6000
console.log(a.toPrecision(1));//4e+1
console.log(a.toPrecision(2));//43
console.log(a.toPrecision(3));//42.6
console.log(a.toPrecision(4));//42.60
数字的十六进制、八进制、二进制:0x
0o
0b
3.较小的数值(0.1+0.2问题)
0.1+0.2 === 0.3 //false
问题
计算机本质是二进制数,而在十进制转化二进制时,会出现无限小数
可以使用网上二进制转化器查询0.1和0.2的二进制数
4.(0.1+0.2)问题的解决办法
设置误差值,
javascript
中是在Number中的EPSILON
方法中
对于ES6之前的版本,可以使用 poly fill 解决
//ES6之前的poly fill
if(!Number.EPSILON){
Number.EPSILON = Math.pow(2,-52); //1位符号位、11位阶码、52位尾数
}
//ES6之后
function numberCloseEnoughToEqual(n1,n2){
return Math.abs(n1 - n2) < Number.EPSILON;
}
5.深入背后原理
JavaScript中采用的是64位IEEE 754浮点数标准,其中有
52位
表示尾数
,对于一些二进制大于52位的浮点数,通常采用的是截断或其他方法(0舍1入,置1法,直接截断)
6.整数的安全范围
由于javascript
中是64位浮点数,所以最大值为1.798e+308
。
但是最大的安全数字是253 -1,最小的安全数字是-(253 -1)。
对于大于53位的数字,会被补0表示,会丢失一定的精度。
在ES6
中分别被定义为:Number.MAX_SAFE_INTEGER
、Number.MIN_SAFE_INTEGER
目前较大的数值只能借助相关的工具库!!
7.整数检测
检测是否是整数Number.isInteger()
//polyfill
if(!Number.isInteger){
Number.isInteger = function(num){
return typeof num == "number" && num % 1 == 0;
}
}
检测是否是安全的整数Number.isSafeInteger()
polyfill
if(!Number.isSafeInteger){
Number.isSafeInteger = function(num){
return Math.abs(num) <= Number.MAX_SAFE_INTEGER;
}
}