이 글은 JavaScript에 대한 관련 지식을 제공하며, 주로 숫자 유형에 대한 관련 내용을 소개합니다. JavaScript에는 두 가지 유형의 숫자가 있습니다. Number 유형과 BigInt 유형을 함께 살펴보겠습니다. 돕다.
[관련 권장사항: 자바스크립트 동영상 튜토리얼, 웹 프론트엔드]
JavaScript
에는 두 가지 유형의 숫자가 있습니다.
일반적인 의미의 Number
유형인 Number 유형은 64
비트 IEEE-754
형식으로 저장되며 "이중 정밀도 부동 소수점 숫자"입니다. Number
유형;
BigInt
유형은 모든 길이의 정수를 나타냅니다. 일반적으로 2 53 에서 -2 53 이외의 숫자를 나타내지 않는 한 이를 사용하지 않습니다. 이러한 전문적인 데이터 유형은 이후 장에서 자세히 소개할 것입니다.
숫자를 쓰는 방법은 매우 간단하지만 JavaScrpt
우리가 사용할 수 있는 편리하고 빠른 구문 설탕이 많이 있습니다. 이러한 구문 설탕을 배우면 코드 읽기 능력이 향상될 뿐만 아니라 코드에 대한 높은 수준의 감각도 향상됩니다.
십진수는 가장 간단하며 거의 모든 기사에서 이를 사용합니다. 예를 들어 변수를 만들고 100
억을 저장합니다.
10억 = 10000000000이라고 하자.
작업은 매우 간단하지만 1
다음에 0
몇 개나 오는지 세는 것이 어렵다는 문제가 있습니다. 이체 코드를 작성할 때 0
잘못 입력하면 파산할 수 있습니다.
이때 다음과 같이 _
구분 기호로 사용할 수 있습니다.
10억 = 10_000_000_000;
위의 코드는 0
의 개수를 명확하게 계산할 수 있으며 이는 분명히 최적의 솔루션입니다!
여기서 _
실행 중에 엔진에 의해 무시되는 JavaScript
의 구문 설탕입니다. 위의 두 가지 쓰기 방법은 동일한 효과를 가지지만 읽기 경험은 매우 다릅니다.
칭치 뇌 회로
일부 아동용 신발은 "저는 어렸을 때부터 항상 4
0
그룹에 속해 있었는데 왜 3
0
그룹을 지정해야 합니까?"라고 묻습니다. 따라서 다음과 같이 문제없이 작성할 수 있습니다.
10억 = 100_0000_0000;
아니면 다음과 같이 작성할 수도 있습니다.
10억 = 1_0000_0000_00;
여기서 제가 표현하고 싶은 것은 어떤 나눗셈 방식을 사용해도 숫자 자체의 크기에는 영향을 미치지 않는다는 것입니다. 가장 강력한 방식을 생각해 보세요!
_
사용하면 여러 개의 0
우아하게 나눌 수 있지만, 실제 생활에서는 일반적으로 이렇게 쓰지 않습니다. 예를 들어 10000000000
"100억"으로 쓰는 경우가 많아서 0
많이 생략할 수 있어 가능성이 줄어듭니다. 실수.
JavaScript
0
생략하는 방법도 제공합니다. 문자 e
뒤에 숫자를 사용하여 0
의 수를 나타낼 수 있습니다. 예:
tenbillion = 1e10;//100억, 1 뒤에 10 0sconsole.log(3.14e9);//3140000000, 뒤에 7 0이 옵니다. 궁금한 점이 있으면 아래를 살펴보세요.
위 코드에 대한 이해는 매우 간단합니다. e10
1
다음에 10
오는 1_0000_0000_00
으로 이해될 수 0
다음과 같이 생각할 수 있습니다.
1e10 === 1 * 1_0000_0000_00;//e10은 1 뒤에 10이 오는 것을 의미합니다. 03.14e9 === 3.14 * 1_000_000_000;//e9는 1 뒤에 9 0이 오는 것을 의미합니다.
또한 이 방법을 사용하여 1
나노미터와 같은 매우 작은 숫자를 나타낼 수도 있습니다.
nm = 0.000000001 //단위(미터)
0
너무 많기 때문에 _
사용할 수도 있습니다.
nm = 0.000_000_001로 설정합니다.
물론 다음과 같이 e
사용하여 모든 0
생략할 수도 있습니다.
nm = 1e-9;//9 소수점 앞을 포함하여 1의 왼쪽에 0초
즉, e-9
1 -9 , 즉 1/1000_000_000
을 의미하므로 다음 방정식은 참입니다.
1e-9 === 1 / 1_000_000_000;3.14e-8 === 3.14 / 1_000_000_00;
16진수는 색상, 인코딩 등 프로그래밍에서 일반적으로 사용되는 형식입니다. 16진수를 나타내기 위해 일반 숫자 앞에 0x
추가할 수 있습니다.
hex = 0xff;//255, 대소문자를 구분하지 않음, 0xFF는 동일함
이진수는 0b
로 시작합니다.
빈 = 0b1011;//11
8진수는 0o
로 시작합니다.
oct = 0o777;//511로 설정
이 간단한 작성 방법은 이러한 세 가지 특수 유형만 지원합니다. 다른 기본 숫자의 경우 특수 함수를 사용하여 이를 생성할 수 있습니다( parseInt
).
toString
메소드는 숫자를 base
에 해당하는 문자열 형식으로 변환할 수 있습니다.
밤을 줘 :
숫자 = 996으로 두십시오. console.log(num.toString(8));//8진수 문자열로 변환 console.log(num.toString(16));//16진수 문자열로 변환 console.log(num.toString( 32));// 32개의 16진수 문자열로 변환
코드 실행 결과는 다음과 같습니다.
base
의 범위는 2
~ 36
입니다. 입력하지 않을 경우 기본값은 10
입니다.
숫자를 사용하여 toString
메서드를 직접 호출하는 경우 경우에 따라 두 개의 .
console.log(123.toString(8));//오류, 구문 오류 console.log(123..toString(8));//올바름, 173
숫자 뒤에 .
가 두 개 있습니다. 이는 JavaScript
에서 숫자 뒤의 첫 번째 .
가 소수점으로 간주되고 두 번째 점이 .
소수이면 이 문제가 발생하지 않습니다. 예를 들면 다음과 같습니다.
console.log(3.14.toString(8));
또는 두 개의 점을 사용하지 않으려면 괄호를 사용할 수 있습니다. 예를 들면 다음과 같습니다.
console.log((123).toString(8));//'173
반올림은 숫자에 대한 가장 일반적인 작업 중 하나이며 일반적으로 다음을 포함합니다.
반내림, Math.floor(num)
console.log(Math.floor(3.14));//3 console.log(Math.floor(9.99));//9 console.log(Math.floor(-3.14));//-4 console.log(Math.floor(-9.99));//-10
반올림 원칙을 따르지 말고 현재 값보다 작거나 같은 가장 가까운 정수를 직접 가져옵니다.
반올림하여 Math.ceil(num)
console.log(Math.ceil(3.14));//4 console.log(Math.ceil(9.99));//10 console.log(Math.ceil(-3.14));//-3 console.log(Math.ceil(-9.99));//-9
반올림 원칙을 따르지 말고 현재 숫자보다 크거나 같은 가장 가까운 정수를 직접 가져옵니다.
가장 가까운 정수로 반올림합니다. Math.round(num)
console.log(Math.round(3.14));//3 console.log(Math.round(9.99));//10 console.log(Math.round(-3.14));//-3 console.log(Math.round(-9.99));//-10
반올림 원칙에 따라 현재 숫자에 가장 가까운 정수가 사용됩니다.
소수점 제거, Math.trunc(num)
console.log(Math.trunc(3.14));//3 console.log(Math.trunc(9.99));//9 console.log(Math.trunc(-3.14));//-3 console.log(Math.trunc(-9.99));//-9
소수점 이하의 숫자를 직접 제거하고 정수로 반올림합니다. IE 브라우저는 이 방법을 지원하지 않습니다
위의 네 가지 방법을 비교해 보세요.
수학.바닥 | Math.ceil | 수학.라운드 | 수학.trunc | |
---|---|---|---|---|
3.14 | 3 | 4 | 3 | 3 |
9.99 | 9 | 10 | 10 | 9 |
-3.14 | -4 | -3 | -3 | -3 |
-9.99 | -10 | -9 | -10 | -9 |
위의 방법은 단순히 소수를 정수로 반올림하는 경우가 있는데, 예를 들어 파이의 마지막 4
자리를 취하면 어떻게 해야 할까요?
두 가지 방법이 있습니다:
수학 곱셈과 나눗셈 계산
pi = 3.1415926;console.log(Math.round(pi * 10000) / 10000);//3.1416
위의 코드는 먼저 pi
에 10000
곱한 다음 반올림한 다음 10000
으로 나누어 정확도 요구 사항을 충족하는 결과를 얻습니다. 그러나 이것은 어리석은 것처럼 보이며 JavaScript
우리에게 더 쉬운 방법을 제공합니다.
~고정(n)
pi = 3.1415926;console.log(pi.toFixed(4));//3.1416
위의 코드는 출력에 문제가 없는 것 같습니다. 실제로 toFixed
문자열을 반환합니다. 숫자 유형이 필요한 경우 단항 연산자 + pi.toFixed(4)
를 사용할 수 있습니다.
또한 소수 가수가 충분히 길지 않으면 toFixed
끝에 '0'
추가합니다.
let num = 3.1;console.log(num.toFixed(9));
코드 실행 결과는 다음과 같습니다.
이는 또한 toFixed
의 반환 값이 문자열임을 증명합니다. 그렇지 않으면 0
생략됩니다.
부동 소수점 표현은 많은 경우 항상 편향되어 있습니다.
컴퓨터 내부에서 부동 소수점 숫자는 IEEE-754
표준에 따라 표현됩니다. 여기서 단정밀도 부동 소수점 숫자는 32
비트이고 배정밀도 부동 소수점 숫자는 64
비트입니다. 배정밀도 부동 소수점 숫자에서 1
비트는 부호를 나타내는 데 사용되고, 52
비트는 유효 숫자를 저장하는 데 사용되며, 11
비트는 소수점 위치를 저장하는 데 사용됩니다.
64
비트는 이미 매우 큰 숫자를 나타낼 수 있지만 여전히 경계를 넘을 가능성이 있습니다. 예를 들면 다음과 같습니다.
let bigNum = 1e999;console.log(bigNum);//무한대
최대값을 초과하는 숫자는 Infinity
(infinity)가 되어 원래 숫자의 크기를 잃게 되는데, 이는 일종의 편차이다.
우리가 배워야 할 또 다른 종류의 편차가 있습니다.
console.log(0.1+0.2 === 0.3);//falseconsole.log(0.1 + 0.2);
코드 실행 결과는 다음과 같습니다.
맞습니다. 0.1 + 0.2
의 결과는 0.3
이 아니라 0
뒤에 4
가 붙은 것입니다.
이러한 종류의 편차는 특히 쇼핑몰 및 은행 업무 시나리오에서 매우 치명적입니다. 심지어 아주 작은 편차라도 높은 회전율 시나리오에서는 끝없는 부의 손실로 이어질 것입니다.
직원 한 명당 월급이 20센트에 불과해 수백만 달러를 훔친 은행 직원의 이야기를 들은 적이 있습니다.
만약 나에게 이런 일이 일어난다면 절대 찾을 수 없을 거라 생각하기 때문에 항상 정확하게 아는 것이 중요하다.
이 이야기가 사실인지 아닌지는 모르겠습니다~~
우리의 일반적인 십진법을 예로 들어보겠습니다. 우리 모두는 소수에 두 가지 이상한 것이 있다는 것을 알고 있습니다. 1/3
는 무한 반복 소수이고 다른 하나는 무한 비반복 소수입니다. 십진수 0.3333333(3)
및 pi 무한 비반복 소수입니다. 무한이란 숫자의 크기를 숫자로 명확하게 설명할 수 없으며 우리가 쓸 수 있는 내용이 부정확하다는 의미입니다.
이진수에는 무한히 반복되는 숫자도 있습니다. 차이점은 십진수에서는 매우 단순해 보이는 0.1
과 같은 숫자가 이진수에서는 무한히 반복되는 십진수라는 것입니다.
예를 들어:
x = 0.1;console.log(x.toFixed(20));
코드 실행 결과는 다음과 같습니다.
정말 대단하다고 생각하지 않나요? 우리는 단순히 변수를 만들고 0.1
이라는 값을 할당한 다음 소수점 이하 20
자리를 사용했지만 놀라운 결과를 얻었습니다.
각도를 바꾸면 이 현상을 이해하는 것이 더 쉬울 수 있습니다. 십진법에서는 10
또는 10
의 정수 거듭제곱으로 나눈 모든 정수가 1/10
또는 996/1000
과 같이 정상적이고 정확한 숫자입니다. 그러나 3
으로 나누면 1/3
과 같은 루핑 결과를 얻게 됩니다.
이 설명은 바이너리로 변환된 경우에도 유효합니다.
이진수에서 2
로 나눈 정수 또는 2
의 정수 거듭제곱은 일반적인 정확한 숫자입니다. 그러나 이를 10
으로 나누면 이진수의 무한 루프가 발생합니다.
따라서 십진수가 1/3
설명할 수 없는 것처럼 이진수는 0.1
과 0.2
정확하게 나타낼 수 없다는 결론을 내릴 수 있습니다.
알아채다:
이러한 종류의 데이터 편차는 JavaScript의 결함이 아니며 PHP, Java, C, Perl 및 Ruby의 경우에도 동일한 결과입니다.
반올림
무한히 반복되는 소수를 표시할 때 toFixed
메소드를 사용하여 직접 소수점을 반올림할 수 있는데, 이 메소드는 가격을 표시하는데 매우 편리합니다.
0.3.toFixed(2);//0.30
작은 단위를 사용하라
또 다른 방법은 총 가격을 계산하기 위해 위안 대신 센트를 사용하는 것과 같이 더 작은 단위를 사용하여 가격과 거리를 계산하는 것입니다. 그러나 이 방법은 소수의 발생 횟수를 줄일 뿐, 소수의 발생을 완전히 피할 수 있는 방법은 없습니다.
JavaScript
숫자에는 Infinity
와 NaN
두 가지 특수 값이 있습니다.
숫자가 일반 숫자인지 어떻게 판단하나요?
우리는 두 가지 방법을 사용할 수 있습니다:
isFinite(발)
이 함수는 매개 변수 val
숫자 유형으로 변환한 다음 숫자가 유한한지 확인하고 숫자가 NaN
, Infinity
또는 -Infinity
아닌 경우 true
반환합니다.
console.log(isFinite(NaN));//falseconsole.log(isFinite(Infinity));//falseconsole.log(isFinite(3));//trueconsole.log(isFinite('12'));// 진실
코드 실행 결과는 다음과 같습니다.
숫자로 변환할 수 없는 문자열은 NaN
으로 변환되므로 isFinite
메서드를 사용하여 문자열이 숫자 문자열인지 확인할 수 있습니다.
console.log(isFinite('xxxx'));//falseconsole.log(isFinite('Infinite'));//falseconsole.log(isFinite(' '));//true, 빈 문자열은 0으로 변환됩니다.
코드 실행 결과는 다음과 같습니다.
isNaN(발)
val
이 NaN
이거나 숫자로 변환할 수 없는 다른 값인 경우 true
반환합니다.
console.log(isNaN(NaN));//trueconsole.log(isNaN('무한'));//true
코드 실행 결과:
isNaN
함수를 직접 읽는 대신 왜 사용합니까?
예를 들어:
console.log(NaN === NaN);//false
코드 실행 결과는 다음과 같습니다.
이는 NaN
자신을 포함하여 어떤 숫자와도 같지 않기 때문입니다.
Object.is(a,b)
매개변수 a
와 b
동일한지 여부를 확인할 수 있습니다. 두 값이 같으면 true
반환하고, false
않으면 결과는 다음 세 가지입니다.
NaN과 비교 가능
console.log(Object.is(NaN,NaN));//true
코드 실행 결과:
0과 -0
console.log(Object.is(0,-0));//false
코드 실행 결과:
컴퓨터 내에서 양수와 음수는 0
과 1
로 표시됩니다. 부호가 다르기 때문에 0
과 -0
실제로 다르며 다른 방식으로 표현됩니다.
다른
다른 비교 상황은 a === b
와 완전히 동일합니다.
parseInt
및 parseFloat
문자열을 숫자로 변환할 수 있으며 +
및 Number
와 달리 제한이 더 느슨합니다. 예를 들어, "100¥"
과 같은 문자열에 +
및 Number
사용하면 필연적으로 NaN
반환되지만, parseInt
및 parseFloat
이를 쉽게 처리할 수 있습니다.
예를 들어:
console.log(+"100엔");console.log(parseInt("100엔"));console.log(parseFloat("12.5엔"));
코드 실행 결과:
parseInt
및 parseFloat
더 이상 읽을 수 없을 때까지 문자열에서 숫자를 읽습니다. 둘 다 "99px"
및 "11.4em"
과 같은 숫자로 시작하는 문자열을 처리하는 데 특히 적합하지만 다른 문자로 시작하는 문자열에 대해서는 NaN
이 반환됩니다.
console.log(parseInt('ff2000'));//NaN
그러나 ff2000
발견했습니다.parseInt parseInt
이 상황을 처리할 수 있지만 16진수 매개변수를 추가해야 합니다.
예를 들어:
console.log(parseInt('FF2000',16)); //16719872 console.log(parseInt('0xFF2000',16)); //16719872 console.log(parseInt('nnnnnn',36)); //1430456963
코드 실행 결과:
내장 Math
객체에는 우리가 자주 사용하는 많은 상수와 메서드가 포함되어 있습니다. 다음은 일반적으로 사용되는 몇 가지 예입니다.
수학.PI
Pi Π
무한 비순환 상수입니다. 대신 Math.PI
사용할 수 있습니다.
console.log(Math.PI);
수학.랜덤()
[0,1)
구간에서 난수를 생성합니다.
console.log(Math.random());console.log(Math.random());
특정 범위 내에서 난수가 필요한 경우 특정 값을 곱한 다음 반올림할 수 있습니다.
수학.pow(a,b)
예를 들어 a b 를 계산합니다.
console.log(Math.pow(2,3));//8
Math.max()/Math.min()
여러 인수 중에서 최대/최소 값을 선택하세요.
console.log(Math.max(1,2,3,4,5));//5console.log(Math.min(1,2,3,4,5));//1