00 개요 - JS의 숫자표현
자바스크립트의 숫자표현 : 64비트 부동소수점 표현 방식 사용
- 첫 번째 비트 : 부호 표현
- 열 한개의 비트 : 지수 표현
- 나머지 비트 : 소수 표현
따라서 다음 코드를 돌려보면 예상과는 다른 결과가 나온다
function number_check() {
console.log(5/4) //1.25
console.log("0.1 + 0.2 === 0.3 ? 결과는 ", 0.1+0.2===0.3) //false
console.log("0.1 + 0.2 == 0.3 ? 결과는 ", 0.1+0.2==0.3) //false
}
number_check()
저 코드를 통해서 얻고자 하는 결과는 true 였을텐데, 자바스크립트의 표현 방식으로 인해 false가 출력되는 문제가 발생한다. 이를 해결하기 위해서 활용할 수 있는 게 자바스크립트의 Number 객체다.
01 Number 객체
01-1 Math
// 내림, 반올림, 올림
console.log(Math.floor(1.4)) // 1
console.log(Math.round(1.4)) // 1
console.log(Math.ceil(1.4)) // 2
// 절댓값
console.log(Math.abs(-1.4)) // 1.4
// 랜덤값
console.log(Math.random()) // 0~1 사이의 랜덤 부동소수점
console.log(Math.random()*10+5) // 5~15 사이의 랜덤 부동소수점 => 정수화 시켜주려면?
// 랜덤정수
console.log(Math.floor(Math.random()*10) + 5) // 5~15 사이의 정수
01-2 Epsilon
Epsilon 은 아주 간단히 말하면 너무너무너무 작은 수 라서 만약 어떤 두 수의 차가 엡실론보다 작다면 그건 결국 두 수가 같다고 말할 수 있게 하는 수다. 위에서 봤듯 자바스크립트의 부동소수점 체계로 인해 원하는 결과값이 나오지 않을 때 Epsilon으로 두 수를 같게끔 판별해줄 수 있다.
function comparison(a,b) {
return Math.abs(a-b) < Number.EPSILON
}
console.log(comparison(0.1+0.2, 0.3)) //true
01-3 최대, 최소, 무한대
// ~ INTEGER : 정수반환
// ~ VALUE : 부동소수점 반환
console.log(Number.MAX_SAFE_INTEGER) //9007199254740991
console.log(Number.MAX_VALUE) //1.7976931348623157e+308
console.log(Number.MIN_SAFE_INTEGER) //-9007199254740991
console.log(Number.MIN_VALUE) //5e-324
console.log("Number.MIN_VALUE-1 == -1 ? ",Number.MIN_VALUE-1 == -1) //true
console.log(Infinity) // Infinity
console.log(-Infinity) // -Infinity
console.log(Infinity > Number.MAX_SAFE_INTEGER) // true
console.log(-Infinity < Number.MIN_SAFE_INTEGER) // true
'Language > JavaScript' 카테고리의 다른 글
[ JS 기초 ] 소수 확인, 소인수 분해 (0) | 2021.07.05 |
---|---|
[ JS 기초 ] 값 비교 ==, ===, 객체 비교 (12) | 2021.06.28 |
[ JS 기초 ] Boolean 객체의 값(t/f) VS Boolean 값(t/f) (0) | 2021.06.28 |
[ JS 기초 ] 기본 코드 - 변수(var,let) 활용 (0) | 2021.06.27 |
[ JS 기초 ] 기본 코드 - 출력, 반복문, 덧셈 (0) | 2021.06.27 |
댓글