본문으로 바로가기

[JavaScript (9)] Javascript Number 객체, Number 메소드

category 3. 웹개발/3_2_1 Javascript 2020. 3. 26. 15:06
반응형

[JavaScript (9)] Javascript Number 객체, Number 메소드

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 자바스크립트 객체 - Number 입니다. : ) 

 

0. Number 객체란

 

 - 보통 자바스크립트에서 수를 표현할 때는 숫자 리터럴로 표현한다.

var a = 7;


 - 하지만 수를 표현할 때 Number 객체로 생성할 수도 있다. 이 Number 객체를 숫자 값을 감싸고 있는 래퍼(wrapper)객체 라고 한다.

var b = new Number(7);


 - Number 객체는 숫자(원시 숫자 자료형)를 다룰 때 유용한 프로퍼티와 메소드를 제공하는 레퍼(wrapper) 객체이다.
   또한 간단하게는 문자열을 숫자로 변경해주는 용도로도 자주 사용된다.

var c = new Number("123");


 - 만약 인수가 숫자로 변환할 수 없는 값이면 NaN을 리턴 한다.
 - NaN(Not A Number) : 숫자가 아니다. 정의되지 않은 값이나 표현할 수 없는 값.

var d = new Number("갓"); // Nan


 - 숫자 리터럴 방식과 Number객체로 생성한 수는 비교시 다른 결과를 나타낸다.

console.log(a == b); // 값을 비교하는 동등연산자일때 true 
console.log(a === b); // 서로 다른 객체로 판단하여 false 리턴

 

1. Number 객체

▶ 1. Number 생성 방법

 - 문법 : new Number( object )
 - object : 문자열 또는 문자열을 값으로 하는 변수 등을 입력.
 - 숫자 변환 불가시 NaN 리턴.
ex)

var a = new Number(7); //7
var b = new Number("7"); //7
var c = new Number("갓"); //NaN
var d = new Number(undefined); //NaN

▶ 2. Number 메서드

1) Number.parseInt()
 - 문자열을 파싱하여 문자열에 포함된 숫자 부분을 정수 형태로 반환 한다.(문자열로 시작하는 경우 NaN)
 - 문자열이 여러개 존재하는 경우 첫번째 숫자만 반환 한다.

ex)

Number.parseInt("7"); // 7
Number.parseInt(7); // 7
Number.parseInt("7.1"); // 7
Number.parseInt("7 갓"); // 7
Number.parseInt("7갓"); // 7
Number.parseInt("7갓8갓9"); // 7
Number.parseInt("갓7"); // NaN
Number.parseInt(""); // NaN

 

2) Number.parseFloat()
 - 문자열을 파싱하여 문자열에 포함된 숫자 부분을 실수 형태로 반환 한다.(문자열로 시작하는 경우 NaN)
 - 문자열이 여러개 존재하는 경우 첫번째 숫자만 반환 한다.

ex)

Number.parseFloat("7"); // 7
Number.parseFloat(7); // 7
Number.parseFloat("7.1"); // 7.1
Number.parseFloat("7.1 갓"); // 7.1
Number.parseFloat("7.1갓"); // 7.1
Number.parseFloat("7.1갓8갓9"); // 7.1
Number.parseFloat("갓7"); // NaN
Number.parseFloat(""); // NaN

 

3) Number.isNaN()
 - 전달된 값이 NaN인지 아닌지 검사하여 불린으로 리턴한다.
 - 전역변수 isNaN과는 다르게 인수를 변환하지 않기 때문에 숫자가 아닌경우 무조건 false이다.

ex)

Number.isNaN(NaN)       // true
isNaN(NaN);				// true

Number.isNaN("goddamn") // false
isNaN("goddamn")  		// true

Number.isNaN(undefined) // false
isNaN(undefined) 		// true

Number.isNaN({})    	// false
isNaN({})        		// true

 

4) Number.isFinite()

 - 전달된 값이 유한수인지를 검사하여 불린으로 리턴한다.
 - 전역변수 isFinite과는 다르게 인수를 변환하지 않기 때문에 숫자가 아닌경우 무조건 false이다.

ex)

Number.isFinite("goddamn")  // false
Number.isFinite(0)         	// true
Number.isFinite(7e65)      	// true

Number.isFinite(null)      	// false
isFinite(null) 				// true

 

5) Number.isInteger()

 - 전달된 값이 정수인지를 검사하여 불린으로 리턴한다.
 - 인수를 형변환하지 않는다.

ex)

Number.isInteger("7")  	// false
Number.isInteger(0)     // true
Number.isInteger(7e65)  // true
Number.isInteger("7.1") // false
Number.isInteger(null)  // false

 

6) Number.isSafeInteger

 - 전달된 값이 안전한 정수인지를 검사하여 불린으로 리턴한다.
 - 안전한 정수(safe integer) : IEEE 754 국제 표준에서 정의한 64비트 부동 소수점 수로 정확히 표현되는 정수((253 - 1)부터 (253 - 1)).
 - 인수를 형변환하지 않는다.

ex)

Number.isSafeInteger(10);                  // true
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(Math.pow(2, 53));     // false
Number.isSafeInteger(7.1);                 // false
// 두 부분에서 왜 결과가 다른지는 64비트 부동소수점에 대해 이해 하면 알 수 있다.
Number.isSafeInteger(999999999999999);     // true
Number.isSafeInteger(9999999999999999);    // false

 

※ 64비트 부동소수점

0 ~ 51 비트 : 52비트의 가수 부분
52 ~ 62 비트 : 11비트의 지수 부분
63 비트 : 1비트의 부호 부분
정밀도 : 정수부는 15자리까지, 소수부는 17자리까지만 유효

 

ex)

var a = 999999999999999;  // 15자리의 정수부 => 999999999999999
var b = 9999999999999999; // 16자리의 정수부 => 10000000000000000
var c = 0.1 + 0.7; // 0.7999999999999999
var d = (0.1 * 10 + 0.7 * 10) / 10; // 0.8

▶ 3. Number.prototype 메서드

 - 모든 Number 인스턴스는 Number.prototype 메서드, 프로퍼티를 상속 받는다.

 

1) Number.prototype.toExponential
 - 전달된 값을 지수 표기법으로 표현한다.
 - numObject.toExponential(소수부분의자릿수)

ex) 123 => 1.23e+2

var a = 123;
console.log(a.toExponential(2)); // 1.23e+2
console.log(123.toPrecision(2)); // Invalid or unexpected token
// 숫자 뒤의 .은 1)객체 프로퍼티에 접근하는 마침표 표기법, 2)소수 구분 기호 등 여러 의미로 해석될 수 있기 때문에 에러가 발생한다.
// 그렇기 때문에 빈 공백또는 () 괄호로 감싸면 해당 메서드르 사용 가능하다.
console.log((123).toPrecision(2)); // 1.2e+2
console.log(123 .toPrecision(2)); // 1.2e+2

var b = 1.23456;
console.log(b.toPrecision(3)); // 1.23
console.log(1.23456.toPrecision(3)); // 1.23

 

2) Number.prototype.toFixed
 - 전달된 값을 지정된 소숫점 자리에서 반올림
ex)

var a = 12.345678;

// 소숫점 이하 반올림
console.log(a.toFixed());   // '12'
// 소숫점 이하 1자리 표현, 2째 자리에서 반올림
console.log(a.toFixed(1));  // '12.3'
// 소숫점 이하 2자리 표현, 3째자리에서 반올림
console.log(a.toFixed(2));  // '12.35'

 

3) Number.prototype.toPrecision
 - 전달된 값을 가수와 소수 부분을 합친 자릿수를 전달받은 자릿수까지 유효하도록 고정, 이후 자릿수에서 반올림 하여 문자열로 반환한다.
ex)

var a = 12.345678;

console.log(a.toPrecision()); // 12.345678
console.log(a.toPrecision(1)); // 1e+1
console.log(a.toPrecision(2)); // 12
console.log(a.toPrecision(3)); // 12.3
console.log(a.toPrecision(4)); // 12.35
console.log(a.toPrecision(5)); // 12.346

 

4) Number.prototype.toString

 - 전달된 값을 문자열로 변환 하여 리턴한다.
 - 파라미터가 있는 경우 해당하는 진법으로 변환한 후 문자열로 리턴 한다.

ex)

var a = 10;
console.log(a.toString());   	// '10'
console.log(10.toString());    	// Invalid or unexpected token
// 숫자 뒤의 .은 1)객체 프로퍼티에 접근하는 마침표 표기법, 2)소수 구분 기호 등 여러 의미로 해석될 수 있기 때문에 에러가 발생한다.
console.log((10).toString());   // '10'
console.log(10 .toString());    // '10'
console.log((10.1).toString()); // '17.1'

var b = 16;
console.log(b.toString(2));       // '10000'
console.log(b.toString(8));       // '20'
console.log(b.toString(16));      // '10'

 

5) Number.prototype.valueOf

 - Number 인스턴스의 원시 값(Primitive value)을 반환함.

ex)

var a = new Number(12.345);   	// 12.345의 값을 가진 Number 인스턴스 생성
var b = a.valueOf();
console.log(a);					// Number {12.345}
console.log(b);               	// 12.345
typeof a;						// object
typeof b;                     	// number

▶ 4. Number 프로퍼티

 - Static Property, Number.propertyName의 형태로 호출 가능하다.

 

1) Number.EPILSON
 - Number 형으로 표현될 수 있는 1과 1보다 큰 값 중에서 가장 작은 값의, 차입니다.
 - 즉 Javscript에서 표현할 수 있는 가장 작은 수 라고 볼 수 있다.
 - 대략 2.2204460492503130808472633361816E-16 또는 2-52

 - 자바스크립트는 부동 소숫점으로 계산하기 때문에 소숫점 계산은 정확 하지 않고, 미세한 오차가 발생한다.

ex)

console.log(0.1 + 0.2);        // 0.30000000000000004
console.log(0.1 + 0.2 == 0.3); // false
console.log(Math.abs(0.1 + 0.2 - 0.3) != 0); // true
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON); // true

 

2) Number.MAX_VALUE
 - 자바스크립트에서 사용 가능한 가장 큰 양수 리턴(1.7976931348623157e+308)

ex)

Number.MAX_VALUE; // 1.7976931348623157e+308

 

3) Number.MAX_SAFE_INTEGER
 - 자바스크립트에서 사용 가능한 안전한 최대 정수.
 - 9007199254740991(9,007,199,254,740,991 또는 약 9000조)

 

4) Number.MIN_VALUE
 - 표현 가능한 가장 작은 양수. 즉, 0보다 크지만 0에 가장 가까운 양수.
 - 약 5e-324
 
5) Number.MIN_SAFE_INTEGER
 - 자바스크립트에서 사용 가능한 안전한 최소 정수.
 - -9007199254740991(-9,007,199,254,740,991 또는 약 -9000조), (-(253 - 1))

6) Number.NEGATIVE_INFINITY
 - 양의 무한대 Infinity를 반환한다. 오버플로우 시에 반환된다.

7) Number.POSITIVE_INFINITY
 - 음의 무한대 Infinity를 반환한다. 오버플로우 시 반환된다.

8) Number.NaN
 - 숫자가 아님(Not-a-Number)을 나타내는 값.

 

반응형

댓글을 달아 주세요