본문 바로가기

프로그래밍 언어/자바스크립트

JavaScript number 타입, 숫자 처리 및 연산 방법

JavaScript number 타입, 숫자 처리 및 연산 방법

JavaScript에서 number 타입은 가장 중요한 데이터 타입 중 하나로, 정수와 부동소수점 숫자를 모두 처리할 수 있습니다. 본 가이드에서는 number 타입의 기본 개념부터 다양한 숫자 처리 방법과 연산 기법에 대해 심도 있게 다룹니다. 특히 숫자 처리 시 주의해야 할 특수 케이스와 고급 활용법도 함께 설명합니다.

 

 

목차

  1. JavaScript에서의 number 타입이란?
  2. 정수와 부동소수점 처리
  3. NaN, Infinity 및 특수 숫자 값
  4. 숫자 형 변환
  5. 숫자 연산 및 Math 객체 활용
  6. 정밀도와 반올림 이슈

 

JavaScript에서의 number 타입이란?

JavaScript에서 number 타입은 숫자를 나타내기 위한 기본 데이터 타입입니다. 다른 언어와 달리, JavaScript는 정수와 부동소수점을 구분하지 않고 모두 number 타입으로 처리합니다. 예를 들어, 42와 3.14 모두 number 타입에 속합니다.


let intNumber = 42;
let floatNumber = 3.14;
console.log(typeof intNumber); // 'number'
console.log(typeof floatNumber); // 'number'
    

이렇게 하나의 타입으로 정수와 실수를 모두 처리할 수 있다는 점이 JavaScript의 특징입니다.

 

 

정수와 부동소수점 처리

JavaScript에서 모든 숫자는 64비트 부동소수점 숫자로 저장됩니다(IEEE 754 표준). 이로 인해 정수와 부동소수점을 구분하지 않으며, 작은 값부터 큰 값까지 매우 넓은 범위의 숫자를 처리할 수 있습니다.

정수 처리 시 주의할 점은 JavaScript가 안전한 정수 범위(Safe Integer)를 갖고 있다는 것입니다. 안전한 정수 범위는 -253에서 253까지입니다. 이를 벗어난 값은 정확한 계산을 보장하지 않습니다.


console.log(Number.MAX_SAFE_INTEGER);  // 9007199254740991
console.log(Number.MIN_SAFE_INTEGER);  // -9007199254740991
    

부동소수점 연산 시에는 정밀도 문제가 발생할 수 있습니다. 예를 들어, 0.1 + 0.2는 정확히 0.3이 아니라 0.30000000000000004로 표현됩니다.


console.log(0.1 + 0.2);  // 0.30000000000000004
    

이러한 부동소수점 연산의 특성 때문에, 정확한 숫자 비교나 연산이 필요할 경우 반올림 처리 등을 통해 정밀도를 관리해야 합니다.

 

 

NaN, Infinity 및 특수 숫자 값

JavaScript에서는 몇 가지 특수한 숫자 값들이 있습니다. 그 중 가장 대표적인 값이 NaNInfinity입니다.

  • NaN (Not-a-Number): 수학적으로 정의되지 않은 연산의 결과나 숫자가 아닌 값을 숫자로 변환하려 할 때 발생합니다. typeof NaN는 'number'로 반환되지만, 그 의미는 "숫자가 아니다"입니다.
  • Infinity: 무한대를 의미하며, 1을 0으로 나누는 경우나 매우 큰 수를 나타낼 때 사용됩니다. 반대의 개념으로는 -Infinity가 있습니다.

console.log(1 / 0);  // Infinity
console.log(Math.sqrt(-1));  // NaN
    

이러한 특수 값들은 조건문이나 계산에서 적절히 처리해야 합니다.

 

 

숫자 형 변환

JavaScript에서는 문자열이나 다른 타입을 숫자로 변환해야 할 때가 자주 있습니다. 이를 위해 다양한 형 변환 방법을 사용할 수 있습니다.

  • Number(): 명시적으로 다른 타입을 숫자로 변환합니다.
  • parseInt(): 문자열을 정수로 변환합니다.
  • parseFloat(): 문자열을 부동소수점 숫자로 변환합니다.
  • +: 단항 연산자를 사용하여 문자열을 숫자로 변환할 수 있습니다.

let str = "123";
console.log(Number(str));  // 123
console.log(parseInt(str));  // 123
console.log(+str);  // 123
    

숫자로 변환할 수 없는 값은 NaN이 반환됩니다.

 

 

 

 

숫자 연산 및 Math 객체 활용

JavaScript는 기본적인 산술 연산뿐 아니라 다양한 수학적 연산을 Math 객체를 통해 제공합니다.

  • 기본 연산: 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 사용할 수 있습니다.
  • Math 객체 활용: Math.sqrt(), Math.pow(), Math.round() 등 다양한 메서드를 제공합니다.

console.log(Math.sqrt(16));  // 4
console.log(Math.pow(2, 3));  // 8
console.log(Math.round(4.6));  // 5
    

또한 난수를 생성할 때는 Math.random()을 사용합니다.


console.log(Math.random());  // 0에서 1 사이의 난수
    

 

 

정밀도와 반올림 이슈

JavaScript에서 숫자 연산 시 가장 흔히 마주하는 문제는 부동소수점 연산의 정밀도입니다. 특히 소수점 이하 자리수가 많은 경우, 정밀한 계산이 어려울 수 있습니다.

이 문제를 해결하기 위해 toFixed() 메서드를 사용할 수 있습니다. 이 메서드는 소수점 이하 자릿수를 지정하여 반올림된 숫자를 반환합니다.


let num = 0.1 + 0.2;
console.log(num.toFixed(2));  // "0.30"
    

그러나 toFixed()는 문자열을 반환하므로, 결과를 다시 숫자로 변환하려면 Number() 등을 사용해야 합니다.

정밀도가 중요한 금융 계산이나 과학 계산을 수행할 때는 이러한 방식으로 소수점 이하 처리를 신중하게 해야 합니다.

 

 

결론

JavaScript의 number 타입은 기본적이면서도 강력한 데이터 타입으로, 다양한 숫자 연산을 지원합니다. 하지만 정밀도 문제나 특수 값 처리와 같은 문제를 이해하고 적절하게 대처해야 정확한 결과를 얻을 수 있습니다. 이 가이드를 통해 숫자 타입을 더 깊이 이해하고 실무에서 효과적으로 활용해보세요.