본문 바로가기

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

JavaScript에서 숫자 다루기, number 타입

JavaScript에서 숫자 다루기, number 타입

JavaScript에서 숫자는 number 타입 하나로 관리됩니다. 정수와 실수의 구분 없이 하나의 데이터 타입으로 표현되며, 이를 유연하게 활용하는 것이 중요합니다. 이 글에서는 number 타입의 특징과 연산, 정밀도 문제, 숫자 변환, 특수 값, 활용법까지 상세히 살펴보겠습니다.

 

 

목차

  1. JavaScript의 number 타입이란?
  2. 기본 연산과 사용법
  3. 정밀도 문제와 해결 방법
  4. 문자열과 숫자 변환
  5. NaN, Infinity, -Infinity
  6. BigInt: 정수를 다루는 새로운 방법
  7. 실전 활용 사례

 

JavaScript의 number 타입이란?

JavaScript의 number 타입은 IEEE 754 64비트 부동소수점 형식을 사용하여 숫자를 저장합니다. 이는 다음과 같은 특징을 가집니다.

  • 정수와 실수를 같은 타입으로 다룸
  • 큰 수와 작은 수를 표현 가능 (약 ±1.8 × 10308)
  • 부동소수점 연산의 정밀도 문제 존재

예제:

console.log(typeof 42);    // "number"
console.log(typeof 3.14);  // "number"

 

 

 

기본 연산과 사용법

JavaScript에서는 기본적인 사칙연산이 가능합니다.

연산자 설명 예제
+ 덧셈 5 + 3 // 8
- 뺄셈 9 - 4 // 5
* 곱셈 7 * 2 // 14
/ 나눗셈 10 / 2 // 5
% 나머지 10 % 3 // 1

 

 

 

정밀도 문제와 해결 방법

JavaScript의 부동소수점 방식은 정밀도 문제를 일으킬 수 있습니다.

예제:

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

해결 방법:

  • toFixed() 메서드 사용
  • 정수 연산 후 다시 변환

 

 

 

문자열과 숫자 변환

JavaScript에서는 문자열과 숫자 간 변환이 필요할 때가 많습니다.

  • 문자열 → 숫자 변환: parseInt(), parseFloat(), Number()
  • 숫자 → 문자열 변환: toString()

 

 

 

 

NaN, Infinity, -Infinity

특수한 숫자 값들이 존재하며, 이를 이해하는 것이 중요합니다.

  • NaN (Not a Number): 숫자가 아닌 연산 결과
  • Infinity: 무한대를 나타냄
  • -Infinity: 음의 무한대

 

 

 

BigInt: 정수를 다루는 새로운 방법

ES11(ES2020)부터 BigInt 타입이 추가되어, 매우 큰 정수를 정확하게 다룰 수 있습니다.

const big = 9007199254740991n; // BigInt 선언
console.log(big + 1n); // 9007199254740992n

 

 

 

실전 활용 사례

JavaScript의 number 타입은 다양한 분야에서 활용됩니다. 특히 금융 계산, 데이터 분석, 웹 애플리케이션 개발 등에서 숫자 처리의 정확성과 성능을 고려해야 합니다. 여기서는 정밀한 연산이 필요한 금융 시스템, 빅데이터를 다루는 데이터 분석, 사용자 입력을 처리하는 웹 애플리케이션에서 number 타입이 어떻게 활용되는지 살펴보겠습니다.

 

1. 금융 및 통화 연산에서 정밀도를 고려한 숫자 처리

금융 시스템에서는 숫자의 정밀도가 매우 중요합니다. JavaScript의 number 타입은 부동소수점 방식을 사용하기 때문에, 단순한 소수 연산도 정밀도 문제가 발생할 수 있습니다.

문제점:

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

위와 같이 0.1과 0.2를 더하면 0.3이 아닌 0.30000000000000004가 반환됩니다. 금융 연산에서는 이러한 미세한 오차가 큰 문제를 일으킬 수 있습니다.

해결 방법:

  • toFixed() 메서드를 사용하여 소수점 이하 자릿수를 조절
  • 정수를 사용한 후 다시 나누는 방식 적용
  • 라이브러리(BigNumber.js 등) 활용

예제: 정수 연산 후 변환

const amount = (0.1 * 100) + (0.2 * 100); // 10 + 20 = 30
console.log(amount / 100); // 0.3

 

2. 데이터 분석에서 대형 숫자(BigInt) 처리

데이터 분석에서는 종종 매우 큰 정수를 다뤄야 합니다. 예를 들어, 통계 데이터를 집계하거나 암호화된 값을 다룰 때 기존 number 타입으로는 정확한 표현이 어려울 수 있습니다.

문제점:

console.log(9007199254740991 + 1); // 9007199254740992 (정확하지만, 그 이상은 오류 발생)
console.log(9007199254740991 + 2); // 9007199254740992 (정확하지 않음)

위와 같이 JavaScript의 최대 안전 정수(Number.MAX_SAFE_INTEGER)를 초과하면 부정확한 값이 반환됩니다.

해결 방법:

  • BigInt 타입을 활용하여 큰 정수 연산 수행
  • 정밀도가 필요한 경우 외부 라이브러리 사용

예제: BigInt를 활용한 안전한 정수 연산

const bigNumber = 9007199254740991n; // 'n'을 붙여 BigInt 선언
console.log(bigNumber + 2n); // 9007199254740993n

 

3. 웹 애플리케이션에서 숫자 변환 및 검증

웹 애플리케이션에서는 사용자의 입력을 처리할 때, 숫자 변환과 검증이 필수적입니다. 예를 들어, 사용자가 입력한 값이 숫자인지 확인하거나, 숫자 연산을 수행해야 할 때 주의해야 합니다.

문제점:

  • 사용자의 입력이 문자열로 처리되는 경우
  • 잘못된 입력을 숫자로 변환할 때 NaN 발생

해결 방법:

  • parseInt() 또는 parseFloat()를 사용하여 숫자로 변환
  • isNaN()를 사용하여 유효한 숫자인지 확인

예제: 사용자 입력을 숫자로 변환

const userInput = "123.45";
const numberValue = parseFloat(userInput);

if (!isNaN(numberValue)) {
    console.log("올바른 숫자입니다:", numberValue);
} else {
    console.log("잘못된 입력입니다.");
}

 

결론

JavaScript의 number 타입은 다양한 환경에서 활용됩니다. 금융 시스템에서는 정밀한 연산을, 데이터 분석에서는 BigInt를, 웹 애플리케이션에서는 숫자 변환 및 검증을 신중하게 처리해야 합니다. 이러한 개념을 이해하고 적절한 방법을 적용하면 보다 안전한 숫자 처리가 가능합니다.