본문 바로가기
Language/JavaScript

[JavaScript] 객체 - Number 객체와 메소드

by 풍파 2021. 10. 29.

자바스크립트에서의 수 표현

- 모든 수는 정수와 실수 구분 없이 실수 하나로 표현

- IEEE 754 국제 표준에서 정의한 64비트 부동 소수점 수로 저장

- 부동 소수점 수로 수행하는 산술 연산은 언제나 오차 발생 가능성이 존재

=> 정수로 변환하여 수행 후, 실수로 재변환

 

 

진법 표현

- 0x 접두사 이용 시, 16진법 수 표현 가능

- 산술 연산 시, 모든 수가 10진수로 자동 변환되어 계산

- 숫자.toString() 메소드로 여러 진법의 형태로 변환 가능 => 변환된 형태의 문자열을 반환하는 것

const num = 256;

num.toString(2);       //  2진법으로 변환 : 100000000
num.toString(8);       //  8진법으로 변환 : 400
num.toString(10);      // 10진법으로 변환 : 256
num.toString(16);      // 16진법으로 변환 : 100
// 2진수로 변환한 결괏값을 문자열로 반환함.
num.toString(2);       // 100000000
// 문자열을 숫자로 나눴기 때문에 자동으로 10진수로 변환되어 산술 연산된 결괏값
(num.toString(2) / 2); // 50000000

 

 

Infinity

- 양의 무한대 Infinity & 음의 무한대 -Infinity

- 임의로 수정할 수 없는 읽기 전용 값

- 어떤 수보다도 큰 수로 취급

const x = 10 / 0;         // 숫자를 0으로 나누면 Infinity를 반환함.
const y = Infinity * 1000 // Infinity에 어떠한 수를 산술 연산해도 Infinity를 반환함.
const z = 1 / Infinity    // Infinity의 역수는 0을 반환함.

x;                      // Infinity
y;                      // Infinity
z;                      // 0

 

 

NaN

- Not a Number, 숫자가 아니다

- 정의되지 않은 값이나 표현할 수 없는 값

- 0 을 0 으로 나누거나 숫자로 변환할 수 없는 피연산자로 산술 연산 시 반환되는 읽기 전용 값

const x = 100 - "10";     // "10"은 자동으로 숫자로 변환되어 계산됨.
const y = 100 - "문자열"; // "문자열"은 숫자로 변환할 수 없기 때문에 NaN을 반환함.
const z = 0 / 0;          // 0을 0으로 나눌 수 없기 때문에 NaN을 반환함.

x;                      // 90
y;                      // NaN
z;                      // NaN

- isNaN() 함수를 사용하면 판별 가능

 

 

null, undefined, NaN, Infinity에 대한 비교

- null : object 타입, 아직 값이 정해지지 않은 것

- undefined : undefined 타입, 타입이 정해지지 않은 것

- NaN : number 타입, 숫자가 아님

- Infinity : number 타입, 무한대

Boolean 문맥 Number 문맥 String 문맥
null false 0 "null"
undefined false NaN "undefined"
NaN false NaN "NaN"
Infinity true Infinity "Infinity"

 

 

Number 객체

- new 연산자로 생성, 래퍼 객체

const x = 100;             // 숫자 리터럴
const y = new Number(100); // Number 객체

x;                       // 100
y;                       // 100

typeof x;                // number 타입
typeof y;                // object 타입

x == y;                  // 값이 같으므로 true
x === y;                 // 서로 다른 객체이므로 false

* new 연산자로 객체 생성 시, 매우 많은 추가 연산을 해야함

=> 가능한 숫자 리터럴로 수를 표현하고 Number 객체는 래퍼 객체로만 활용하도록

 

 


 

Number 메소드

1. Number.parseFloat()
2. Number.parseInt()
3. Number.isNaN()
4. Number.isFinite()
5. Number.isInteger()
6. Number.isSafeInteger()

 

 

1. Number.parseFloat()

- 문자열을 파싱하여 포함된 숫자 부분을 실수 형태로 반환

- 여러 개의 숫자 존재 시, 첫 번째 숫자만 실수 형태로 반환

- 전역 함수 parseFloat() 와 같은 동작 수행

Number.parseFloat("12");         // 12
Number.parseFloat("12.34");      // 12.34
Number.parseFloat("12문자열");   // 12
Number.parseFloat("12 34 56");   // 12
Number.parseFloat("문자열 56")); // NaN

- IE, 사파리 지원 X

 

 

2. Number.parseInt()

- 문자열을 파싱하여 포함된 숫자 부분을 정수 형태로 반환

- 여러 개의 숫자 존재 시, 첫 번째 숫자만 정수 형태로 반환

- 전역 함수 parseInt() 와 같은 동작 수행

Number.parseInt("12");         // 12
Number.parseInt("12.34");      // 12
Number.parseInt("12문자열");   // 12
Number.parseInt("12 34 56");   // 12
Number.parseInt("문자열 56")); // NaN

- IE, 사파리 지원 X



3. Number.isNaN()

- 전달된 값이 NaN 인지 아닌지 검사

- 전역 함수 isNaN() 가 갖던 문제를 겪지 않게 해줌

- 오직 숫자인 값에서만 동작

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

// 다음은 전역 함수인 isNaN()에서 잘못된 결과를 반환하는 예제임.
isNaN("NaN");            // true
isNaN(undefined);        // true
isNaN("문자열");         // true

// Number.isNaN() 메소드에서 맞는 결과를 반환하고 있음.
Number.isNaN("NaN");     // false
Number.isNaN(undefined); // false
Number.isNaN("문자열");  // false

- IE 지원 X



4. Number.isFinite()

- 전달된 값이 유한한 수인지 아닌지 검사

- 전역 함수 isFinite() 처럼 전달된 값을 숫자로 강제 변환 X

- 오직 셀 수 있는 값에서만 동작

Number.isFinite(0);        // true
Number.isFinite(3e45);     // true
Number.isFinite(Infinity); // false
Number.isFinite(NaN);      // false

// 다음은 전역 함수인 isFinite()에서 잘못된 결과를 반환하는 예제임.
isFinite("0");             // true
isFinite(null);            // true

// Number.isFinite() 메소드에서는 맞는 결과를 반환하고 있음.
Number.isFinite("0");      // false
Number.isFinite(null);     // false

- IE 지원 X



5. Number.isInteger()

- 전달된 값이 정수인지 아닌지 검사

- NaN, Infinity 도 모두 false

Number.isInteger(0);        // true
Number.isInteger(-100);     // true
Number.isInteger(0.1);      // false
Number.isInteger("문자열"); // false
Number.isInteger(Infinity); // false
Number.isInteger(true);     // false

- IE, 사파리 지원 X



6. Number.isSafeInteger()

- 전달된 값이 안전한 정수인지 아닌지 검사

안전한 정수(safe integer) : IEEE 754 국제 표준에서 정의한 64비트 부동 소수점 수로 정확히 표현되는 정수
- -(2^53 - 1) ~ (2^53 - 1) 의 정수 포함
Number.isSafeInteger(10);                  // true
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(Math.pow(2, 53));     // false
Number.isSafeInteger(Infinity);            // false
Number.isSafeInteger(NaN);                 // false
Number.isSafeInteger(3.14);                // false

- IE, 사파리 지원 X

 

 


 

Number.prototype 메소드

- 모든 Number 인스턴스는 Number.prototype 으로부터 메소드와 프로퍼티를 상속받음

 

1. Number.prototype.toExponential()
2. Number.prototype.toFixed()
3. Number.prototype.toPrecision()
4. Number.prototype.toString()
5. Number.prototype.valueOf()

 

 

1. Number.prototype.toExponential()

- Number 인스턴스의 값을 지수 표기법으로 변환한 후, 문자열로 반환

- 전달받은 값은 지수 표기법에서 소수 부분의 자릿수로 사용

numObj.toExponential([소수부분의자릿수])
const num = 12.3456;       // Number 인스턴스를 생성함.

num.toExponential();     // 1.23456e+1
num.toExponential(2);    // 1.23e+1
num.toExponential(4);    // 1.2346e+1
12.3456.toExponential(); // 1.23456e+1

 

 

 

2. Number.prototype.toFixed()

- Number 인스턴스의 소수 부분 자릿수를 전달받은 값으로 고정한 후, 문자열로 반환

- 소수점 자리수 제한

numObj.toFixed([소수부분의자릿수])
const num = 3.14159265;  // Number 인스턴스를 생성함.

num.toFixed();         // 3
num.toFixed(2);        // 3.14
num.toFixed(4);        // 3.1416
3.14159265.toFixed(6); // 3.141593

 


3. Number.prototype.toPrecision()

- Number 인스턴스의 가수와 소수 부분을 합친 자릿수를 전달받은 값으로 고정한 후, 정밀 유효 숫자로 반올림한 문자열로 반환

- 수의 길이 제한

numObj.toPrecision([전체자릿수])
const num = 3.14159265;      // Number 인스턴스를 생성함.

num.toPrecision();         // 3.14159265
num.toPrecision(2);        // 3.1
num.toPrecision(4);        // 3.142
3.14159265.toPrecision(6); // 3.14159



4. Number.prototype.toString()

- Number 인스턴스의 값을 문자열로 반환

- 전달받은 값에 해당하는 진법으로 우선 변환한 후, 문자열로 반환

numObj.toString([진법])
const num = 255;       // Number 인스턴스를 생성함.

num.toString();      // 255
(255).toString();    // 255
(3.14).toString();   // 3.14
num.toString(2);     // 11111111
(100).toString(16);  // 64
(-0xff).toString(2); // -11111111

- 숫자 리터럴에 toString() 메소드 사용 시엔 반드시 괄호 ( ) 로 숫자 리터럴을 감싸줄 것

=> SyntaxError 방지



5. Number.prototype.valueOf()

- Number 인스턴스가 갖고 있는 값 반환

numObj.valueOf()
const numObj = new Number(123); // 123의 값을 가지는 Number 인스턴스를 생성함.
typeof numObj;                // object

const num = numObj.valueOf();
num;                          // 123
typeof num;                   // number

 

 

 

 

 

http://tcpschool.com/javascript/js_standard_number

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

댓글