>  기사  >  웹 프론트엔드  >  javascript -숫자 유형 값

javascript -숫자 유형 값

高洛峰
高洛峰원래의
2017-02-25 16:16:351193검색

일반 소개

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의 연산 결과는 자기 자신, 0 또는 NaN만 가능합니다


* 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

이 값은 값을 반환해야 하는 피연산자가 반환되지 않았음을 나타냅니다. Case

NaN은 자신을 포함한 어떤 값과도 같지 않으며 NaN과 관련된 모든 연산은 NaN


 5 - 'x'; //NaN
 Math.acos(2); //NaN
 0 / 0; //NaN
 NaN == NaN;//false
 NaN == Infinity;//false


를 반환합니다.

NaN은 독립적인 데이터 유형이 아니지만 해당 데이터 유형은 여전히 ​​Number에 속합니다.

 typeof NaN; //number

isNaN 메소드를 사용하여 값이 다음과 같은지 여부를 확인할 수 있습니다. 그러나 NaN은 isNaN은 숫자값에만 유효합니다. 다른 값이 전달되면 먼저 숫자값으로 변환됩니다. 예를 들어 문자열이 전달되면 문자열이 먼저 NaN으로 변환되므로 마지막에 true가 반환된다는 점에 특히 주의해야 합니다. 즉, isNaN이 true인 값은 NaN이 아니라 문자열일 수 있습니다.


 isNaN('Hello') // true
 // 相当于
 isNaN(Number('Hello')) // true


NaN을 판단하는 더 신뢰할 수 있는 방법은 NaN이 JavaScript에서 다음과 같지 않은 유일한 값이라는 사실을 이용하는 것입니다.


 function isNaN(value){
 return value != value;
 }


숫자체계 변환

3가지 기능이 있습니다. 숫자가 아닌 값을 숫자 값으로 변환할 수 있는 Number(),parseInt(),parseFloat(). 그중 Number()는 모든 유형의 값을 숫자 값으로 변환할 수 있는 반면,parseInt()와parseFloat()는 문자열을 숫자로 변환하는 데만 사용됩니다.

Number()

변환 규칙:

1. 불리언 값인 경우 true와 false가 각각 1과 0으로 변환됩니다

2. null 값, 0

3、如果是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中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.