科学的記数法で数値をフォーマットする方法は?
JavaScriptで非常に大きな数値と非常に小さな数値を表示する方法を学ぶ
はじめに
科学的記数法は、数値を係数と10の累乗の積として表現します。例えば、123,000,000は1.23 × 10^8となり、0.000000456は4.56 × 10^-7となります。この形式により、非常に大きな数値や非常に小さな数値が読みやすく、比較しやすくなります。
科学データ、財務情報、または技術的な測定値を表示するWebアプリケーションでは、数値をこのように表示する必要があることがよくあります。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としてフォーマットされ、ゼロを数える必要がなくなります。
ロケールによって異なる科学的表記法のフォーマット
異なるロケールでは、科学的表記法における小数点区切り文字が異なります。ほとんどのラテン文字ベースのロケールでは指数区切り文字は 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 を生成します。
科学的表記法での精度の制御
minimumSignificantDigits および maximumSignificantDigits オプションは、フォーマットされた出力に表示される桁数を制御します。有効桁数には、最初の非ゼロ桁から最後の桁までの係数内のすべての桁が含まれます。
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に設定すると、出力は正確に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となるように)、両方の表記法は同じ結果になります。
科学表記法と工学表記法のユースケース
科学表記法は、メトリック接頭辞との整合性よりも読みやすさと一貫性が重要なデータを表示するアプリケーションに適しています。
科学表記法の使用例:
- 科学計算機や計算ツール
- 天文学アプリケーション(距離、質量、輝度)
- 化学アプリケーション(分子量、濃度)
- 物理シミュレーション(粒子質量、電磁気値)
工学表記法は、ユーザーがメトリック接頭辞で考えたり、値を口頭でコミュニケーションする必要があるアプリケーションに適しています。
工学表記法の使用例:
- 電子工学アプリケーション(キロオームの抵抗、ピコファラッドのコンデンサ容量)
- 電気工学ツール(電圧、電流、電力)
- 通信システム(メガヘルツの周波数、ギガビットのデータレート)
- 機械工学(キロニュートンの力、ニュートンメートルのトルク)
選択はユーザーとドメインによって異なります。科学表記法はすべての数値で一貫したフォーマットを提供し、工学表記法はエンジニアが測定値をコミュニケーションする方法と一致します。