[Javascript] Number 메서드

2025. 7. 9. 09:00Javascript/Javascript

728x90
반응형

 

 

 

Number Contructor

 

Number 객체는 Number() 생성자 함수를 통해 생성할 수 있다. 만일 인자가 숫자로 변한될 수 없다면 NaN을 반환한다.

var x = new Number(123);
var y = new Number('123');
var z = new Number('str');

console.log(x); // 123
console.log(y); // 123
console.log(z); // NaN

 

 

그러나 일반적으로 숫자를 사용할 때에는 원시 타입 숫자를 사용한다.

var x = 123;
var y = new Number(123);

console.log(x == y);  // true
console.log(x === y); // false

console.log(typeof x); // number
console.log(typeof y); // object

 

new 연산자를 사용하여 객체를 생성할 때에는 매우 많은 추가 연산을 해야만 한다. 따라서 가능한 한 숫자 리터럴을 사용하여 수를 표현하고 Number 객체는 래퍼 객체로만 활용하는 것이 좋다.

 

 

 

Number.EPSILON

 

Number.EPSILON은 자바스크립트에서 표현할 수 있는 가장 작은 수로, 이는 임의의 수와 그 수보다 큰 수 중 가장 작은 수와의 차이와 같다.

 

자바스크립트에서 부동 소수점 산술 연산 비교는 정확한 값을 기대하기 어려운데 정수는 2진법으로 오차 없이 저장이 가능하지만 부동소수점을 표현하는 데 가장 널리 쓰이는 표준인 IEEE754는 2진법으로 변환 시 무한 소수가 되어 미세한 오차가 발생할 수밖에 없는 구조적 한계를 갖기 때문이다.

 

따라서 부동 소수점의 비교는 Number.EPSILON을 사용하여 비교 기능을 갖는 함수를 작성해야 한다.

 

console.log(0.1 + 0.2);        // 0.30000000000000004
console.log(0.1 + 0.2 == 0.3); // false

function isEqual(a, b){
  // Math.abs는 절댓값을 반환한다.
  // 즉 a와 b의 차이가 JavaScript에서 표현할 수 있는 가장 작은 수인 Number.EPSILON보다 작으면 같은 수로 인정할 수 있다.
  return Math.abs(a - b) < Number.EPSILON;
}

console.log(isEqual(0.1 + 0.2, 0.3)); // true

 

 


 

 

Number.MAX_VALUE

 

자바스크립트에서 사용 가능한 가장 큰 숫자를 반환한다. MAX_VALUE보다 큰 숫자는 Infinity이다.

 


 

Number.MIN_VALUE

 

자바스크립트에서 사용 가능한 가장 작은 숫자를 반환한다. MIN_VALUE는 0에 가장 가까운 양수 값으로 MIN_VALUE보다 작은 숫자는 0으로 변환된다.

 



Number.POSITIVE_INFINITY

 

양의 무한대 Infinity를 반환한다.

 


 

Number.NAGATIVE_INFINITY

 

음의 무한대 -Inifinity를 반환한다.

 



Number.NaN

 

숫자가 아님(Nat a Number)을 나타내는 숫자값이다. Number.NaN 프로퍼티는 window.NaN 프로퍼티와 같다.

console.log(Number('xyz')); // NaN
console.log(1 * 'string');  // NaN
console.log(typeof NaN);    // number

 

 


 

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

 

자바스크립트에서는 약간 비슷한 것 같으면서도 전혀 다른 4가지 값을 제공하고 있다.

 

  • null은 object 타입이며 아직 값이 정해지지 않은 것을 의미하는 값이다.
  • undefined는 null과 달리 하나의 타입으로, 타입이 정해지지 않은 것을 의미하는 값이기도 하다.
  • NaN은 number 타입으로 '숫자가 아님'을 의미하는 숫자이다.
  • Infinity는 number 타입으로 '무한대'를 의미하는 숫자이다.

 

자바스크립트는 타입 검사가 매우 유연한 언어이다. 따라서 위의 값들 또한 문맥에 따라 다음과 같이 자동으로 타입 변환이 이루어진다.

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

 

 


 

Number Method

 

Number.isFinite(number): boolean

 

매개변수에 전달된 값이 정상적인 유한수인지 검사하여 그 결과를 Boolean으로 반환한다.

 

Number.isFinite()는 전역 함수 isFinite()와 차이가 있다. 전역 함수 isFinite()는 인수를 숫자로 변환하여 검사를 수행하지만 Number.isFinite()는 인수를 변환하지 않는다. 따라서 숫자가 아닌 인수가 주어졌을 때 반환값은 언제나 false가 된다.

Number.isFinite(Infinity)  // false
Number.isFinite(NaN)       // false
Number.isFinite('Hello')   // false

Number.isFinite(0)         // true
Number.isFinite(2e64)      // true
Number.isFinite(null)      // false. isFinite(null) => true

 

 


 

 

Number.isInteger(number): boolean

 

매개변수에 전달된 값이 정수(Integer)인지 검사하여 그 결과를 Boolean으로 반환한다. 검사 전에 인수를 숫자로 변환하지 않는다.

Number.isInteger(123)   //true
Number.isInteger(-123)  //true
Number.isInteger(5-2)   //true
Number.isInteger(0)     //true
Number.isInteger(0.5)   //false
Number.isInteger('123') //false
Number.isInteger(false) //false
Number.isInteger(Infinity)  //false
Number.isInteger(-Infinity) //false
Number.isInteger(0 / 0) //false

 


 

 

Number.isNaN(number): boolean

 

매개변수에 전달된 값이 NaN인지 검사하여 그 결과를 Boolean으로 반환한다.

 

Number.isNaN()은 전역 함수 isNaN()과 차이가 있다. 전역 함수 isNaN()은 인수를 숫자로 변환하여 검사를 수행하지만 Number.isNaN은 인수를 변환하지 않는다. 따라서 숫자가 아닌 인수가 주어졌을 때 반환값은 언제나 false가 된다.

 

Number.isNaN(NaN)       // true
Number.isNaN(undefined) // false. undefined → NaN. isNaN(undefined) → true.
Number.isNaN({})        // false. {} → NaN.        isNaN({}) → true.
Number.isNaN('blabla')  // false. 'blabla' → NaN.  isNaN('blabla') → true.

Number.isNaN(true)      // false
Number.isNaN(null)      // false
Number.isNaN(37)        // false
Number.isNaN('37');     // false
Number.isNaN('37.37');  // false
Number.isNaN('');       // false
Number.isNaN(' ');      // false
Number.isNaN(new Date())             // false
Number.isNaN(new Date().toString())  // false. String → NaN. isNaN(String) → true.

 


 

 

Number.isSafeInteger(number): boolean

 

매개변수에 전달된 값이 안전한(safe) 정수인지 검사하여 그 결과를 Boolean으로 반환한다.

 

안전한 정수 값은 -(2^53 - 1)과 2^53 - 1 사이의 정수 값이다. 검사 전에 인수를 숫자로 변환하지 않는다.

Number.isSafeInteger(123)   //true
Number.isSafeInteger(-123)  //true
Number.isSafeInteger(5-2)   //true
Number.isSafeInteger(0)     //true
Number.isSafeInteger(1000000000000000)  // true
Number.isSafeInteger(10000000000000001) // false
Number.isSafeInteger(0.5)   //false
Number.isSafeInteger('123') //false
Number.isSafeInteger(Infinity)  //false
Number.isSafeInteger(-Infinity) //false
Number.isSafeInteger(0 / 0) //false

 


 

 

Number.prototype.toFixed(number): string

 

매개변수로 지정된 소숫점자리를 반올림하여 문자열로 반환한다.

var numObj = 12345.6789;

// 소숫점 이하 반올림
numObj.toFixed();   // '12346'
// 소숫점 이하 1자리수 유효, 나머지 반올림
numObj.toFixed(1);  // '12345.7'
// 소숫점 이하 2자리수 유효, 나머지 반올림
numObj.toFixed(2);  // '12345.68'

 


 

Number.prototype.toPrecision(number): string

 

매개변수로 지정된 전체 자리수까지 유효하도록 나머지 자리수를 반올림하여 문자열로 반환한다. 지정된 전체 자리수로 표현할 수 없는 경우 지수 표기법으로 반환한다.

 

var n = 123.112

n.toPrecision(3)  // "123"
n.toPrecision(4) // "123.1"
n.toPrecision(5) // "123.11"

 


 

 

Number.prototype.toString(number): string

 

var count = 10;
count.toString();   // '10'
(17).toString();    // '17'
17 .toString();     // '17'
(17.2).toString();  // '17.2'

var x = 16;
x.toString(2);       // '10000'
x.toString(8);       // '20'
x.toString(16);      // '10'

(254).toString(16);  // 'fe'
(-10).toString(2);   // '-1010'
(-0xff).toString(2); // '-11111111'

 

 

진법 표현

 

자바스크립트에서는 기본적으로 10진법을 사용하여 수를 표현한다. 따라서 아래의 예시처럼 산술 연산 시 모든 수가 10진수로 자동 변한되어 계산된다.

var x = 0xAB; // 16진법으로 표현된 10진수 171
var y = 29; // 10진법으로 표현된 10진수 29

x + y; // 두 수 모두 10진법으로 자동으로 변환되어 계산됨. -> 200

 

또한 숫자에 toString() 메서드를 사용하여 해당 숫자를 여러 진법의 형태로 변환할 수 있다.

var 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

 


 

 

Number.prototype.valueOf(): number

 

Number 객체의 원시 타입 값을 반환한다.

var numObj = new Number(10);
typeof numObj; // object

var num = numObj.valueOf();
num;           // 10
typeof num;    // number

 

 


 

 

Method 설명
Number.parseFloat() 문자열을 파싱하여, 문자열에 포함된 숫자 부분을 실수 형태로 반환함.
Number.parseInt() 문자열을 파싱하여, 문자열에 포함된 숫자 부분을 정수 형태로 반환함.
Number.isNaN() 전달된 값이 NaN인지 아닌지를 검사함.
Number.isFinite() 전달된 값이 유한한 수인지 아닌지를 검사함.
Number.isInteger() 전달된 값이 정수인지 아닌지를 검사함.
Number.isSafeInteger() 전달된 값이 안전한 정수(safe integer)인지 아닌지를 검사함.
toExponential() Number 인스턴스를 지수 표기법으로 변환한 후, 그 값을 문자열로 반환함.
toFixed() Number 인스턴스의 소수 부분 자릿수를 전달받은 값으로 고정한 후, 그 값을 문자열로 반환함.
toPrecision() Number 인스턴스의 가수와 소수 부분의 합친 자릿수를 전달받은 값으로 고정한 후, 그 값을 문자열로 반환함.
toString() Number 인스턴스의 값을 문자열로 반환함.
valueOf() Number 인스턴스가 가지고 있는 값을 반환함.

 

 

 

 

 

 

 

 

728x90
반응형