[JavaScript (9)] Javascript Number 객체, Number 메소드
- -
[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)을 나타내는 값.
'2. 웹개발 > Javascript' 카테고리의 다른 글
당신이 좋아할만한 콘텐츠
-
[JavaScript (12)] Javascript String 객체, String 메소드(replace, substr, split, concat 등) 2020.03.28
-
[JavaScript (11)] Javascript Date 객체, Date 메소드(getDate, getFullYear, getMonth 등) 2020.03.27
-
[JavaScript (8)] Javascript prototype chain(프로토타입 체인) 2020.03.25
-
[JavaScript (7)] Javascript 함수2 - 기본 내장함수(eval, parseInt, encodeURI, encodeURIComponent 등) 2020.03.23
소중한 공감 감사합니다