과학적 표기법으로 숫자를 어떻게 포맷팅하나요?

JavaScript에서 매우 크거나 매우 작은 숫자를 표시하는 방법 알아보기

소개

과학적 표기법은 숫자를 계수와 10의 거듭제곱의 곱으로 표현합니다. 예를 들어, 123,000,000은 1.23 × 10^8로, 0.000000456은 4.56 × 10^-7로 표현됩니다. 이 형식은 매우 크거나 매우 작은 숫자를 더 쉽게 읽고 비교할 수 있게 해줍니다.

과학 데이터, 금융 정보 또는 기술적 측정값을 표시하는 웹 애플리케이션은 종종 이러한 방식으로 숫자를 형식화해야 합니다. JavaScript는 Intl.NumberFormat API를 통해 과학적 표기법을 기본적으로 지원하며, 이는 형식화와 지역화를 모두 처리합니다.

이 글에서는 숫자를 과학적 표기법으로 형식화하는 방법, 정밀도 제어, 지역별 차이점 이해, 그리고 과학적 표기법과 공학적 표기법 중 선택하는 방법을 보여드립니다.

숫자를 과학적 표기법으로 형식화하기

Intl.NumberFormat 생성자는 숫자가 표시되는 방식을 제어하는 notation 옵션을 받습니다. notation"scientific"으로 설정하면 숫자가 과학적 표기법으로 형식화됩니다.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(987654321));
// 출력: 9.877E8

출력 9.877E8은 9.877 × 10^8을 나타냅니다. E는 계수와 지수를 구분합니다.

매우 큰 숫자 형식화하기

과학적 표기법은 매우 큰 숫자를 계수와 지수로 표현하여 표시를 단순화합니다.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(6.02214076e23));
// 출력: 6.022E23

console.log(formatter.format(299792458));
// 출력: 2.998E8

console.log(formatter.format(7800000000));
// 출력: 7.8E9

6.02214076e23(아보가드로 상수)는 6.022E23으로 형식화되어 602,214,076,000,000,000,000,000보다 읽기 쉽습니다.

매우 작은 숫자 형식화하기

과학적 표기법은 매우 작은 숫자에도 적용되며, 1보다 작은 값을 표현하기 위해 음수 지수를 사용합니다.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

console.log(formatter.format(0.000000001));
// 출력: 1E-9

console.log(formatter.format(0.00000000000000000016));
// 출력: 1.6E-19

console.log(formatter.format(0.0000000456));
// 출력: 4.56E-8

0.00000000000000000016(전자의 쿨롱 단위 근사 전하량)는 1.6E-19로 형식화되어 0의 개수를 세는 번거로움을 피할 수 있습니다.

로케일에 따라 다른 과학적 표기법 형식

로케일에 따라 과학적 표기법에서 사용하는 소수점 구분 기호가 다릅니다. 대부분의 라틴 기반 로케일에서 지수 구분 기호는 E로 유지되지만, 계수의 소수점 구분 기호는 로케일 규칙을 따릅니다.

const numberToFormat = 987654321;

// 미국 영어는 소수점 구분 기호로 마침표를 사용합니다
const usFormatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});
console.log(usFormatter.format(numberToFormat));
// 출력: 9.877E8

// 포르투갈어는 소수점 구분 기호로 쉼표를 사용합니다
const ptFormatter = new Intl.NumberFormat('pt-PT', {
  notation: 'scientific'
});
console.log(ptFormatter.format(numberToFormat));
// 출력: 9,877E8

// 독일어도 소수점 구분 기호로 쉼표를 사용합니다
const deFormatter = new Intl.NumberFormat('de-DE', {
  notation: 'scientific'
});
console.log(deFormatter.format(numberToFormat));
// 출력: 9,877E8

미국 영어 로케일은 마침표를 사용하여 9.877E8을 출력하는 반면, 포르투갈어와 독일어 로케일은 쉼표를 사용하여 9,877E8을 출력합니다.

과학적 표기법에서 정밀도 제어

minimumSignificantDigitsmaximumSignificantDigits 옵션은 형식화된 출력에 표시되는 자릿수를 제어합니다. 유효 자릿수는 첫 번째 0이 아닌 숫자부터 마지막 숫자까지 계수의 모든 자릿수를 포함합니다.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific',
  minimumSignificantDigits: 3,
  maximumSignificantDigits: 3
});

console.log(formatter.format(123456789));
// 출력: 1.23E8

console.log(formatter.format(0.00045678));
// 출력: 4.57E-4

두 옵션을 모두 3으로 설정하면 출력이 정확히 세 자리의 유효 숫자로 제한됩니다. 이러한 옵션이 없으면 포맷터는 원래 숫자에서 더 많은 자릿수를 포함합니다.

최소값과 최대값을 다르게 설정하여 가변 정밀도를 허용할 수도 있습니다.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific',
  minimumSignificantDigits: 2,
  maximumSignificantDigits: 5
});

console.log(formatter.format(123456789));
// 출력: 1.2346E8

console.log(formatter.format(100000000));
// 출력: 1.0E8

이 구성은 입력 숫자에 따라 2~5자리의 유효 숫자를 허용합니다.

공학 표기법으로 숫자 형식 지정하기

공학 표기법은 지수가 항상 3의 배수인 과학적 표기법의 변형입니다. 이는 킬로(10^3), 메가(10^6), 기가(10^9)와 같은 SI 미터법 접두사와 일치합니다.

const formatter = new Intl.NumberFormat('en-US', {
  notation: 'engineering'
});

console.log(formatter.format(987654321));
// 출력: 987.654E6

console.log(formatter.format(0.000000456));
// 출력: 456E-9

숫자 987,654,321은 공학 표기법에서 987.654E6으로 형식이 지정되며, 과학적 표기법에서는 9.877E8과 비교됩니다. 지수 6은 3의 배수입니다.

과학적 표기법과 공학 표기법의 차이점

과학적 표기법과 공학 표기법의 주요 차이점은 지수를 선택하는 방식입니다. 과학적 표기법은 모든 정수 지수를 사용하는 반면, 공학 표기법은 지수를 3의 배수로 제한합니다.

const scientificFormatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});

const engineeringFormatter = new Intl.NumberFormat('en-US', {
  notation: 'engineering'
});

const testNumbers = [105900, 1234567, 0.00045];

testNumbers.forEach(num => {
  console.log(`Number: ${num}`);
  console.log(`Scientific: ${scientificFormatter.format(num)}`);
  console.log(`Engineering: ${engineeringFormatter.format(num)}`);
  console.log('---');
});

// 출력:
// Number: 105900
// Scientific: 1.059E5
// Engineering: 105.9E3
// ---
// Number: 1234567
// Scientific: 1.235E6
// Engineering: 1.235E6
// ---
// Number: 0.00045
// Scientific: 4.5E-4
// Engineering: 450E-6
// ---

105,900의 경우, 과학적 표기법은 1.059E5를 생성하는 반면 공학 표기법은 105.9E3을 생성합니다. 과학적 표기법이 이미 3의 배수를 사용하는 경우(1,234,567이 1.235E6를 생성하는 것처럼), 두 표기법 모두 동일한 결과를 생성합니다.

과학적 표기법과 공학 표기법의 사용 사례

과학적 표기법은 가독성과 일관성이 미터법 접두사와의 정렬보다 더 중요한 데이터를 표시하는 애플리케이션에 적합합니다.

과학적 표기법 사용 사례:

  • 과학 계산기 및 계산 도구
  • 천문학 애플리케이션(거리, 질량, 광도)
  • 화학 애플리케이션(분자량, 농도)
  • 물리학 시뮬레이션(입자 질량, 전자기 값)

공학 표기법은 사용자가 미터법 접두사로 생각하거나 값을 구두로 전달해야 하는 애플리케이션에 적합합니다.

공학 표기법 사용 사례:

  • 전자 애플리케이션(킬로옴 단위의 저항, 피코패럿 단위의 커패시턴스)
  • 전기 공학 도구(전압, 전류, 전력)
  • 통신 시스템(메가헤르츠 단위의 주파수, 기가비트 단위의 데이터 속도)
  • 기계 공학(킬로뉴턴 단위의 힘, 뉴턴미터 단위의 토크)

선택은 사용자와 도메인에 따라 달라집니다. 과학적 표기법은 모든 숫자에 걸쳐 일관된 형식을 제공하는 반면, 공학 표기법은 엔지니어가 측정값을 전달하는 방식과 일치합니다.