工学表記法で数値をフォーマットする方法
SI単位接頭辞に合わせた指数で数値を表示するために工学表記法を使用する
はじめに
工学表記法は、10の累乗を使用して数値を表記する方法で、指数は常に3の倍数になります。123,000,000を1.23×10⁸と表示する代わりに、工学表記法では123×10⁶と表示します。この3の倍数に合わせた表記は、キロ(10³)、メガ(10⁶)、ギガ(10⁹)などの国際単位系(SI)の接頭辞と一致しています。
この表記法は、SI接頭辞を使用する測定値が扱われる工学、電子工学、科学的な文脈でよく見られます。4.7×10⁻⁶ファラドのコンデンサは4.7マイクロファラドになります。2.4×10⁹ヘルツの周波数は2.4ギガヘルツになります。工学表記法では、指数がSI接頭辞に直接対応するため、これらの変換が自然に行えます。
JavaScriptでは、Intl.NumberFormat APIを通じて工学表記法の組み込みサポートを提供しています。このAPIは変換を自動的に処理し、異なる言語や地域に合わせてフォーマットを適応させます。
工学表記法とは
工学表記法は、数値を係数と10の累乗の積として表現し、指数は常に3で割り切れる数になります。数値987,654,321は工学表記法では987.654×10⁶となり、JavaScriptの出力では987.654E6と表記されます。
係数は1から999.999の間の数値として表示され、その後にEと指数が続きます。Eは指数を表し、10のその指数乗を掛けることを示します。987.654E6という値は987.654 × 10⁶を意味し、これは987,654,000に等しくなります。
この形式は、987,654,321のようにすべての桁を区切り文字付きで表記する標準的な10進表記とは異なります。また、K、M、Bなどの文字を使用して大きさを表す簡略表記とも異なります。工学表記法は、指数表記を使用して10の累乗を明示的に示します。
エンジニアリング表記法が3の倍数を使用する理由
3の倍数に制限されているのは、SI単位の接頭辞が1000の倍数で増減するためです。接頭辞のスケールを1段階上げると10³倍になり、1段階下げると10³で割ることになります。
10のべき乗に対するSI接頭辞を考えてみましょう:
- 10³ = キロ (k)
- 10⁶ = メガ (M)
- 10⁹ = ギガ (G)
- 10¹² = テラ (T)
- 10⁻³ = ミリ (m)
- 10⁻⁶ = マイクロ (μ)
- 10⁻⁹ = ナノ (n)
- 10⁻¹² = ピコ (p)
数値がエンジニアリング表記法で指数6を使用している場合、それがメガ接頭辞に対応していることがわかります。指数が-9の場合は、ナノ接頭辞に対応していることがわかります。この直接的な対応関係により、SI単位が主流の技術分野ではエンジニアリング表記法が実用的になっています。
この制限がなければ、表記法とSI接頭辞の間で変換するために暗算を行う必要があります。この制限があれば、変換は即座に行えます。
エンジニアリング表記法と科学表記法の違い
科学表記法も10のべき乗を使用して数値を表現しますが、可能な限り小さい指数を使用します。数値987,654,321は科学表記法では9.87654321×10⁸となり、9.87654321E8と表記されます。
科学表記法では、小数点の前に常に1つの非ゼロ桁だけが置かれます。エンジニアリング表記法では、指数が3の倍数になるように、小数点の前に最大3桁まで許容されます。
const scientificFormatter = new Intl.NumberFormat("en-US", {
notation: "scientific"
});
console.log(scientificFormatter.format(987654321));
// 出力: "9.877E8"
const engineeringFormatter = new Intl.NumberFormat("en-US", {
notation: "engineering"
});
console.log(engineeringFormatter.format(987654321));
// 出力: "987.654E6"
科学表記フォーマッターは9.877E8を生成し、小数点の前に1桁を配置します。エンジニアリング表記フォーマッターは987.654E6を生成し、指数を8ではなく6にするために小数点の前に3桁を配置します。
両方の表記法は同じ値を表していますが、エンジニアリング表記法は指数を最小化するよりもSI接頭辞との整合性を優先します。
JavaScriptでの工学表記法の使用
Intl.NumberFormatのnotationオプションは、数値の表現方法を制御します。これを"engineering"に設定すると、工学表記法が有効になります。
const formatter = new Intl.NumberFormat("en-US", {
notation: "engineering"
});
console.log(formatter.format(1500));
// 出力: "1.5E3"
console.log(formatter.format(1500000));
// 出力: "1.5E6"
console.log(formatter.format(1500000000));
// 出力: "1.5E9"
フォーマッターは数値の大きさに基づいて適切な指数を自動的に選択します。指数は常に3の倍数であり、SI接頭辞との整合性を確保します。
正しい指数や係数を計算する必要はありません。Intl APIは数値に基づいてこれらの計算を処理します。
工学表記法が異なる桁数をどのようにフォーマットするか
工学表記法はあらゆる規模、非常に小さな数から非常に大きな数まで適用されます。異なる桁数が指数にどのようにマッピングされるかを理解することで、出力を予測するのに役立ちます。
const formatter = new Intl.NumberFormat("en-US", {
notation: "engineering"
});
console.log(formatter.format(0.0015));
// 出力: "1.5E-3"
console.log(formatter.format(0.0000015));
// 出力: "1.5E-6"
console.log(formatter.format(1.5));
// 出力: "1.5E0"
console.log(formatter.format(1500));
// 出力: "1.5E3"
console.log(formatter.format(1500000));
// 出力: "1.5E6"
console.log(formatter.format(1500000000));
// 出力: "1.5E9"
console.log(formatter.format(1500000000000));
// 出力: "1.5E12"
1未満の小さな数値は負の指数を使用します。0.0015は1.5E-3となり、ミリ接頭辞に対応します。0.0000015は1.5E-6となり、マイクロ接頭辞に対応します。
1付近の数値は指数0を使用します。1.5は1.5E0となり、これは1.5 × 10⁰ = 1.5 × 1 = 1.5に等しくなります。
大きな数値は正の指数を使用します。1500は1.5E3となり、キロ接頭辞に対応します。このパターンはメガ、ギガ、テラと続きます。
工学表記法での小数点以下の桁数の制御
デフォルトでは、フォーマッターは係数に複数の小数点以下の桁を含めます。minimumFractionDigitsとmaximumFractionDigitsオプションを使用して精度を制御できます。
const defaultFormatter = new Intl.NumberFormat("en-US", {
notation: "engineering"
});
console.log(defaultFormatter.format(1234567));
// 出力: "1.235E6"
const noDecimalsFormatter = new Intl.NumberFormat("en-US", {
notation: "engineering",
maximumFractionDigits: 0
});
console.log(noDecimalsFormatter.format(1234567));
// 出力: "1E6"
const twoDecimalsFormatter = new Intl.NumberFormat("en-US", {
notation: "engineering",
maximumFractionDigits: 2
});
console.log(twoDecimalsFormatter.format(1234567));
// 出力: "1.23E6"
maximumFractionDigitsオプションは、係数の小数点以下に表示される桁数を制限します。これを0に設定すると、すべての小数点以下の桁が削除され、係数の整数部分のみが表示されます。
複数の数値間で一貫したフォーマットを維持するために、最小小数点以下桁数を強制することもできます。
const formatter = new Intl.NumberFormat("en-US", {
notation: "engineering",
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
console.log(formatter.format(1000));
// 出力: "1.00E3"
console.log(formatter.format(1500));
// 出力: "1.50E3"
console.log(formatter.format(1234567));
// 出力: "1.23E6"
これにより、すべての数値が正確に小数点以下2桁を表示することが保証され、表やレポートでの視覚的な一貫性を維持するのに役立ちます。
ロケールによるエンジニアリング表記法の動作方法
エンジニアリング表記法は、小数点区切り文字に関する異なるロケール規則に適応します。指数の形式は一貫していますが、係数の書式はロケールに基づいて変化します。
const enFormatter = new Intl.NumberFormat("en-US", {
notation: "engineering"
});
console.log(enFormatter.format(1234567));
// 出力: "1.235E6"
const deFormatter = new Intl.NumberFormat("de-DE", {
notation: "engineering"
});
console.log(deFormatter.format(1234567));
// 出力: "1,235E6"
const frFormatter = new Intl.NumberFormat("fr-FR", {
notation: "engineering"
});
console.log(frFormatter.format(1234567));
// 出力: "1,235E6"
英語では係数の小数点区切り文字としてピリオドを使用します。ドイツ語とフランス語では小数点区切り文字としてカンマを使用します。Eと指数はすべてのロケールで同じままです。
このローカライゼーションは係数部分にのみ適用されます。Eと指数値を使用した指数表記は国際的な科学的慣例に従い、ロケール間で変更されません。
エンジニアリング表記法と他のフォーマットオプションの組み合わせ
エンジニアリング表記法は他の数値フォーマットオプションと連携します。エンジニアリング表記法を使用しながら、丸め、有効桁数、符号表示を制御できます。
const formatter = new Intl.NumberFormat("en-US", {
notation: "engineering",
signDisplay: "always"
});
console.log(formatter.format(1500000));
// 出力: "+1.5E6"
console.log(formatter.format(-1500000));
// 出力: "-1.5E6"
signDisplayオプションは正の数にプラス記号を表示するかどうかを制御します。これを"always"に設定すると、正と負の両方の値に符号が表示されます。
小数点以下の桁数ではなく、有効桁数を制御することもできます。
const formatter = new Intl.NumberFormat("en-US", {
notation: "engineering",
minimumSignificantDigits: 4,
maximumSignificantDigits: 4
});
console.log(formatter.format(1234567));
// 出力: "1.235E6"
console.log(formatter.format(1567890));
// 出力: "1.568E6"
minimumSignificantDigitsとmaximumSignificantDigitsオプションは、小数点以下の桁数だけでなく、係数の有効桁数の合計を制御します。
工学表記法を使用するタイミング
工学表記法は、SI単位接頭辞を使用する測定値を扱う技術的な文脈で最も効果的です。電子機器のドキュメント、科学論文、エンジニアリング仕様書では一般的にこの表記法が使用されています。
4.7×10⁻⁶ファラドのコンデンサを持つ回路を文書化する場合、工学表記法では値を4.7E-6と表示します。エンジニアはこれをすぐに4.7マイクロファラドと認識します。2.4×10⁹ヘルツの周波数を表示する場合、工学表記法では2.4E9と表示され、エンジニアはこれを2.4ギガヘルツと認識します。
この表記法は、指数表記を理解できない可能性がある一般の視聴者には適していません。ソーシャルメディアのカウンター、eコマースの価格、一般消費者向けダッシュボードでは、代わりに標準表記法またはコンパクト表記法を使用すべきです。
精度が重要で、すべての桁が重要な場合は工学表記法を使用しないでください。財務計算、法的文書、監査証跡には正確な10進表現が必要です。銀行残高は$1,234.56と表示すべきであり、1.23456E3ではありません。
対象となる視聴者を考慮してください。エンジニア、物理学者、技術専門家は工学表記法を期待し理解します。一般消費者は標準表記法またはコンパクト表記法の方が読みやすいと感じます。