JS에는 숫자 데이터 유형이 하나뿐입니다. 정수이든 플로팅 포인트 번호이든 JS는 숫자로 분류됩니다.
17 형; // "숫자"
유형 98.6; // "숫자"
타입 2.1; // "숫자"
JS의 모든 숫자는 이중 정밀 부동 소수점 번호입니다. 그것은 IEEE754 표준에 의해 공식화 된 64 비트 코드 번호입니다 (이게 무엇인가, 모르겠습니다. 그냥 찾아보고 확인하십시오)
그렇다면 JS는 어떻게 정수를 표현합니까? 이중 정밀 플로팅 포인트 번호는 최대 53 비트 정밀도 (개념이없고, 너무 많은 데이터를 처리하지 않았고, 사용하지 않았고, 사용하지 않았습니다!), -9007199254740992 (-253)에서 9007199254740992 (253)에서 9007199254740992 (253)의 모든 정수는 유효한 이중 선례 수를 완벽하게 나타낼 수 있습니다.
대부분의 산술 연산자는 정수, 실수 또는이 둘의 조합을 사용하여 계산할 수 있습니다.
0.1*1.9 //0.19
-99+100 // 1
21-12.3 //8.7
2.5/5 //0.5
21%8 // 5
산술 연산자는 매우 특별합니다. JS는 오페라를 플로팅 포인트 번호로 직접 계산하지는 않지만,이를 암시 적으로 32 비트 정수로 변환하여 작업을 수행합니다. (정확히 말하면, 그것은 32 비트 Big-Endian의 2 개 중 2 개를 나타내는 정수로 변환 될 것입니다 (솔직히 말해서, 여기에서 그것이 무엇을 의미하는지, 인기있는 과학을 검색하십시오) Bitwise 또는 Operation Expressions를 사용하십시오.
예:
8 | 1; // 9
계산 프로세스
우선, 8과 1은 이중 프레시션 플로팅 포인트 번호입니다. 그러나 그것은 또한 32 비트 정수, 즉 32 비트 이진 표현으로 표현 될 수 있습니다.
정수 8은 32 비트 바이너리로 표시됩니다.
0000 0000 0000 0000 0000 0000 0000 1000
그럴 수도 있습니다
(8) .tostring (2); // "1000"
매개 변수 Tostring은 변환 기반입니다
(다음은 내가 다른 카디널리티로 전환하려고했던 것입니다.이 기사와는 아무런 관련이 없습니다).
(8) .TOSTRING (8); // "10"
(8) .TOSTRING (16); // "8"
정수 1은 32 비트 바이너리로 표시됩니다.
0000 0000 0000 0000 0000 0000 0000 0000 0001
비트를 실행하거나
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0000 0000 0001
--------------------------------------------------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1001
동일하게 표준 라이브러리 함수 Parseint Verification을 사용하고 2를 카디널리티로 사용합니다. 주요 0은 계산 결과에 영향을 미치지 않으며 불필요합니다.
parseint ( '1001', 2) // 9
(다음은 내가 다른 카디널리티로 전환하려고했던 것입니다.이 기사와는 아무런 관련이 없습니다).
parseint ( '1001', 8) // 513
parseint ( '1001', 16) // 4097
산술 작업을 요약하는 프로세스는 피연산자를 정수로 변환 한 다음 정수 비트 모드를 사용하여 작업을 수행하고 결과를 표준 JS 부동 소수점 번호로 변환하는 것입니다.
부동 소수점 번호의 경고 : 악명 높은 부정확성. 예를 들어
0.1+0.2; //0.30000000000000000004
이유 : 64 비트 플로팅 지점 숫자의 정확도는 이미 매우 높지만 이중 정제 플로팅 포인트 숫자는 유한 한 숫자 세트만을 나타낼 수 있지만 모든 실수 세트를 나타낼 수는 없습니다. 플로팅 포인트 작업은 가장 가까운 대표 실수로 반올림하는 대략적인 결과 만 생성 할 수 있습니다. 일련의 작업을 수행하면 반올림 오류가 축적되면 작업 결과가 덜 정확 해집니다. 반올림은 또한 산술 운영 법칙에서 일부 편차를 유발합니다. 예를 들어, 유대 법칙. 실수로
x, y, z는 항상 (x+y)+z = x+(y+z) 만족합니다.
플로팅 포인트는 반드시 다음과 같습니다.
(0.1+0.2) +0.3; //0.60000000000000000001
0.1+ (0.2+0.3); //0.6
플로팅 포인트 숫자는 정확도와 성능의 무게를 측정합니다. 정밀도에 관심이 있으면 부동 소수점 번호의 한계에주의하십시오.
해결책은 부동 소수점 작업을 정수 작업으로 변환하는 것입니다.
(10+20) +30; // 60
10+ (20+30); // 60
그런 다음 배율 계수를 나누십시오. 정수 범위는 -253 ~ 253 내에 있어야합니다.
요약
1. JS의 수는 이중 프레시션 플로팅 점수입니다
2. JS의 정수는 단일 유형이 아닌 이중 프레시션 플로팅 지점 번호의 하위 집합 일뿐입니다.
3. 비트 조작은 숫자를 32 비트의 서명 된 정수로 취급합니다.
4. 부동 소수점 작업의 정확성을 조심하십시오
위의 기사 JavaScript의 부동 소수점 번호에 대한 심층적 인 이해는 내가 당신과 공유 한 모든 내용입니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.