JS 숫자의 비밀
반올림 오류
Javascript가 어떻게 작동하는지 모르는 경우 Javascript에서 흥미로운 일이 발생할 수 있습니다. 예를 들어 부동 소수점 숫자는 반올림 오류를 일으킵니다. 0.1과 0.2는 정확하게 표현할 수 없습니다. 따라서 0.1 + 0.2 === 0.3은 거짓이 됩니다.
왜 그런 일이 일어나고 있습니까? Javascript는 32비트 부동 소수점 숫자 시스템을 사용합니다. 많은 소수를 이진법으로 표현하려면 무한한 자릿수가 필요합니다. 0.1(1/10)을 계산하려고 하면 소수점이 무한정 나옵니다.
0.1 + 0.2
의 결과는 0.30000000000000004
이며 0.3
와 같지 않습니다.번호.EPSILON
Number.EPSILON
는 표현 가능한 두 숫자 사이의 가장 작은 간격을 반환합니다. 이는 부동 소수점 근사 문제에 유용합니다.function numberEquals(x: number, y: number) {
return Math.abs(x - y) < Number.EPSILON;
}
numberEquals(0.1 + 0.2, 0.3); // true
0.1 + 0.2
와 0.3
의 차이는 Number.EPSILON
보다 작습니다.더블 도트
숫자는 소수점이 고정된 문자열로 변환될 수 있습니다. 정수에 대해
toFixed()
함수를 직접 호출하려면 5..toFixed(1) === '5.0'
와 같이 이중 점 표기법을 사용해야 합니다. 왜 해야 합니까? 첫 번째 점 표기법은 부동 소수점 숫자를 나타내기 위한 것입니다. 0.77.toFixed(1) === '0.7'
이전 예에서 toFixed()
함수를 사용하여 같음(0.1 + 0.2).toFixed(1) === 0.3.toFixed(1)
을 일치시킬 수 있습니다.참고: Javascript의 프리미티브는 객체가 아니지만
"string".length
, 0.77.toFixed(1)
를 사용할 수 있는 이유는 무엇입니까? 음, Javascript는 메서드를 호출할 때 프리미티브에 대한 값으로 특수 래퍼 객체를 생성하고 실행 후 삭제합니다.최소, 최대
Number
에는 최대 및 최소 정수와 부동 소수점 숫자를 나타내는 흥미로운 상수가 포함되어 있습니다. Javascript에는 Infinity
및 -Infinity
가 있지만 실제 숫자가 아닙니다.Number.MAX_SAFE_INTEGER
는 가장 큰 정수를 반환합니다. 그것은 9007199254740991
와 같습니다. 그리고 이 표현은 참입니다:Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true
Number.MAX_VALUE
는 가장 큰 부동 소수점 숫자를 반환합니다. 1.7976931348623157e+308
와 같습니다. 동일한 표현:Number.MAX_VALUE + 1.111 === Number.MAX_VALUE + 2.022; // true
최소값은
Number.MIN_VALUE
및 5e-324
와 동일한 Number.MIN_SAFE_INTEGER
와 같은 가장 작은 부동 소수점 숫자로 -9007199254740991
로 표시됩니다.Number.MIN_VALUE
도 0에 가장 가까운 부동 소수점입니다.Number.MIN_VALUE - 1 === -1; // true
왜 사실입니까? 이 표현은
0 - 1 === -1
와 유사하기 때문에요약
Javascript 숫자의 크기를 요약해 보겠습니다.
-Infinity < Number.MIN_SAFE_INTEGER < Number.MIN_VALUE < 0 < Number.MAX_SAFE_INTEGER < Number.MAX_VALUE < Infinity
부동 소수점 숫자로 작업할 때 일부 숫자는 정확하게 표현할 수 없기 때문에 반올림 오류를 고려해야 합니다. 타사 라이브러리를 사용하거나
Number.EPSILON
로 숫자 간의 차이를 확인할 수 있습니다.사진 제공: Volkan Olmez on Unsplash
Reference
이 문제에 관하여(JS 숫자의 비밀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/6akcuk/secrets-of-numbers-in-js-1bga텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)