일반 소개
JavaScript는 숫자를 표현하기 위해 내부적으로 IEEE754 형식을 사용하므로 정수와 부동 소수점 숫자를 구분하지 않고 64 형식으로 저장됩니다. -비트 부동 소수점 숫자. 즉, JavaScript에는 소수가 전혀 없습니다. 그러나 일부 작업은 정수로 완료되어야 하므로 JavaScript는 작업을 수행하기 전에 64비트 부동 소수점 숫자를 32비트 정수로 변환하는 경우가 있습니다.
정수
JavaScript는 정수에 대한 네 가지 표현 방법을 제공합니다:
1. 접두사가 0b인 값, 0이나 1 이외의 숫자가 나타나면 오류가 보고됩니다
2. 옥탈: 접두사가 0o인 값, 또는 0 뒤에 숫자가 오는 값(0~7) ). 이전에 언급한 숫자 범위를 초과하는 경우 첫 번째 숫자 0은 무시되고 10진수로 처리됩니다.
참고: 8진수 리터럴은 엄격 모드에서 유효하지 않으며 이 모드를 지원하는 JavaScript 엔진에서 오류가 발생합니다.
3. 16진수: 접두사 0x 뒤에 16진수(0~9, A~F), 대문자, 소문자 모두 허용되며, 범위를 벗어나면 오류가 발생합니다
4. 십진수
var num2 = 0b11; console.log(num2); //3 var num2 = 0b12; console.log(num2); //报错 var num8 = 0o76; console.log(num8); //02 var num8 = 0o78; console.log(num8); //报错 var num16 = 0x2a; console.log(num16); //42 var num16 = 0x2h; console.log(num16) //报错
부동소수점수
부동 소수점 숫자는 숫자에 소수점이 포함되어야 하며 소수점 뒤에 최소한 하나의 숫자가 있어야 합니다. 부동소수점수는 정수와 달리 십진수로만 표현할 수 있습니다.
부동소수점수는 정수에 비해 정확도가 훨씬 떨어지므로 부동소수점수를 사용한 연산을 설계할 때는 주의해야 합니다
예:
console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004 console.log(0.6/0.2); //2.9999999999999996
과학적 표기법
매우 작고 매우 작은 값인 경우 e 표기법(즉, 과학적 표기법으로 표현된 부동 소수점 숫자 표현)을 사용할 수 있습니다. e 표기법으로 표현된 값은 e 앞의 값에 10의 지수승을 곱한 값과 같습니다.
다음 두 가지 경우에는 JavaScript가 자동으로 해당 값을 과학적 표기법으로 변환합니다. 문자 그대로 표현됩니다.
1.소수점이 21자리 이상입니다
console.log(1234567890123456789012);// 1.2345678901234568e+21 console.log(123456789012365648787); //123456789012365660000
2. 소수점 이하 0 자리
console.log(0.0000006);//6e-7 console.log(0.000006); //0.000006
값 범위
메모리 제한으로 인해 , ECMAScript는 월드 값에 모든 값을 저장할 수 없기 때문에 최대값과 최소값이 있습니다.
최소값은 Number.MIN_VALUE에 저장되는데, 이 값은 5e-324
최대값은 Number.MAX_VALUE에 저장되며 이 값은 1.7976931348623157e+308
console.log(Number.MIN_VALUE) //5e-324 console.log(Number.MAX_VALUE); //1.7976931348623157e+308
숫자가 최대값을 초과하는 경우 , javascript는 순방향 오버플로(overflow)라고 하는 Infinity를 반환합니다. 최소 음수 값 -1023(즉, 0에 매우 가까움)과 같거나 초과하는 경우 JavaScript는 숫자를 0으로 직접 변환합니다. 음수 오버플로(언더플로)
값에 빈약한 값이 있는지 확인하려면 isFinite() 함수를 사용할 수 있습니다. 이 함수는 인수가 최소값과 최대값 사이에 있을 때 true를 반환합니다
var result = Number.MAX_VALUE + Number.MAX_VALUE; console.log(isFinite(result)); //false
특수값
1, +0 및 -0
이 두 0은 큰 로그의 경우 동일합니다
-0 === +0; //true 0 === -0; //true 0 === +0; //true
단, 분모로 사용하면 다릅니다
1/-0 == 1/+0; //false
2.
Infinity는 '무한대'를 의미하며 두 가지 시나리오를 나타내는 데 사용됩니다. 하나는 양수 값이 너무 크거나 음수 값이 너무 작아서 표현할 수 없다는 것입니다. 다른 하나는 0이 아닌 값을 0으로 나누어 무한대를 얻는 것입니다.Math.pow(2,Math.pow(2,100));//Infinity 1/0;//Infinity
* Infinity;//Infinity - Infinity;//-Infinity + Infinity;//Infinity / Infinity;//0 Infinity / 2;//Infinity Infinity * Infinity;//Infinity Infinity - Infinity;//NaN Infinity + Infinity;//Infinity Infinity / Infinity;//NaN
3. NaN
이 값은 값을 반환해야 하는 피연산자가 반환되지 않았음을 나타냅니다. CaseNaN은 자신을 포함한 어떤 값과도 같지 않으며 NaN과 관련된 모든 연산은 NaN5 - 'x'; //NaN Math.acos(2); //NaN 0 / 0; //NaN NaN == NaN;//false NaN == Infinity;//false
를 반환합니다.
typeof NaN; //number
isNaN('Hello') // true // 相当于 isNaN(Number('Hello')) // true
function isNaN(value){ return value != value; }
숫자체계 변환
3가지 기능이 있습니다. 숫자가 아닌 값을 숫자 값으로 변환할 수 있는 Number(),parseInt(),parseFloat(). 그중 Number()는 모든 유형의 값을 숫자 값으로 변환할 수 있는 반면,parseInt()와parseFloat()는 문자열을 숫자로 변환하는 데만 사용됩니다.Number()
변환 규칙: 1. 불리언 값인 경우 true와 false가 각각 1과 0으로 변환됩니다2. null 값, 03、如果是undefined,返回NaN
4、如果是字符串,遵循以下规则:
(1)若字符串只包含十进制或十六进制数字,则转成十进制的数字
注意:Number()不识别八进制数字的字符串,会按照十进制数字处理
字符串'1.2.'不会报错,但数字1.2.会报错
(2)若字符串为空字符串或空格字符串,则转成0
(3)其他情况的字符串,则转成NaN
Number(true) //1 Number(null) //0 Number(undefined) //NaN Number("0123") //123 Number("0x123") //291 Number("0.2") //0.2 Number("") //0 Number("asd") //NaN
parseInt()
parseInt()专门用于把字符串转换成整数。在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。如果是,则继续解析,直到解析完成或者遇到非数字字符
console.log(parseInt(' 123.8px'));//123 console.log(parseInt(' 123.8 '));//123 console.log(parseInt(' -123.8px'));//-123 console.log(parseInt('a123.8px'));//NaN console.log(parseInt('0 123.8px'));//0
注意:在ECMAScript5中,parseInt()已经不具备解析八进制的能力。例如八进制“070”,会忽略前面的“0”,得到十进制的70
为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(多少进制)
parseInt("070") //70 parseInt("070",8) //56
parseFloat()
parseFloat()专门用于字符串转换浮点数。同样地,解析时会忽略字符串前面的空格,直到找到第一个非空格字符,然后一直解析到字符串末尾或一个无效的浮点数字字符为止
console.log(parseFloat(' 0123.px'));//123 console.log(parseFloat(' 123.px'));//123 console.log(parseFloat(' 123.1px'));//123.1 console.log(parseFloat(' 123.1.2px '));//123.1 console.log(parseFloat(' -123.0px'));//-123 console.log(parseFloat('.123.1px'));//0.123 console.log(parseFloat('0 123px'));//0
注意:parseFloat()只解析十进制,所以十六进制的字符串始终会被转换成0。因此也没有第二个参数用来指定基数
parseFloat("0xA") //0
注意:Number('')的结果是0,parseInt('')和parseFloat('')的结果是NaN
更多Number类型值相关文章请关注PHP中文网!