본문 바로가기
Language/JavaScript

[ JS 기초 ] Number객체, JS로 표현할 수 있는 숫자 범위

by IM조이 2021. 7. 2.

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

 

댓글