javascript中的数字【详解】

文章目录

    • 数字
    • 数字的语法
    • 较小的数值(0.1+0.2问题)
    • 整数的安全范围
    • 整数检测

数字

深入理解数字的基础:javascript浮点数类型是通过IEEE 754 标准来实现的。

数字的语法

数字值可以调用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

较小的数值(0.1+0.2问题)

0.1+0.2 === 0.3 //false问题

计算机本质是二进制数,而在十进制转化二进制时,会出现无限小数可以使用网上二进制转化器查询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;
}

整数的安全范围

由于javascript中是64位浮点数,所以最大值为1.798e+308

但是最大的安全数字是2^53 -1,最小的安全数字是-(2^53 -1)。

ES6中分别被定义为:Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER

目前较大的数值只能借助相关的工具库!!

整数检测

检测是否是整数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;
    }
}

你可能感兴趣的:(你不知道的javascript,javascript,开发语言,ecmascript)