과학적 표기법으로 숫자를 형식화하는 방법은 무엇인가요?

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));
// Output: 9.877E8

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

매우 큰 숫자 형식화하기

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

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

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

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

console.log(formatter.format(7800000000));
// Output: 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));
// Output: 1E-9

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

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

숫자 0.00000000000000000016(쿨롱 단위의 전자 전하 근사값)은 1.6E-19로 형식화되어 0을 세는 수고를 덜어줍니다.

과학적 표기법 형식은 로케일에 따라 다릅니다

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

const numberToFormat = 987654321;

// US English uses a period as the decimal separator
const usFormatter = new Intl.NumberFormat('en-US', {
  notation: 'scientific'
});
console.log(usFormatter.format(numberToFormat));
// Output: 9.877E8

// Portuguese uses a comma as the decimal separator
const ptFormatter = new Intl.NumberFormat('pt-PT', {
  notation: 'scientific'
});
console.log(ptFormatter.format(numberToFormat));
// Output: 9,877E8

// German also uses a comma as the decimal separator
const deFormatter = new Intl.NumberFormat('de-DE', {
  notation: 'scientific'
});
console.log(deFormatter.format(numberToFormat));
// Output: 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));
// Output: 1.23E8

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

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

가변 정밀도를 허용하도록 서로 다른 최소값과 최대값을 설정할 수도 있습니다.

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

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

console.log(formatter.format(100000000));
// Output: 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));
// Output: 987.654E6

console.log(formatter.format(0.000000456));
// Output: 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('---');
});

// Output:
// 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를 생성하는 경우처럼), 두 표기법 모두 동일한 결과를 생성합니다.

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

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

다음의 경우 과학적 표기법을 사용하세요:

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

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

다음의 경우 공학적 표기법을 사용하세요:

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

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