工学表記で数値をフォーマットする方法

SI単位接頭辞に合わせた指数で数値を表示するために工学表記を使用する

はじめに

工学表記は、指数が常に3の倍数となる10の累乗を使用して数値を記述する方法です。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の倍数で増減するためです。接頭辞スケールの各ステップアップは10³で乗算され、各ステップダウンは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));
// Output: "9.877E8"

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

console.log(engineeringFormatter.format(987654321));
// Output: "987.654E6"

科学フォーマッタは9.877E8を生成し、小数点の前に1桁を配置します。工学フォーマッタは987.654E6を生成し、8ではなく6の指数を達成するために小数点の前に3桁を配置します。

両方の表記法は同じ値を表しますが、工学表記法は指数を最小化するよりもSI接頭辞との整合性を優先します。

JavaScriptで工学表記法を使用する

notationIntl.NumberFormatオプションは、数値の表現方法を制御します。これを"engineering"に設定すると、工学表記法が有効になります。

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

console.log(formatter.format(1500));
// Output: "1.5E3"

console.log(formatter.format(1500000));
// Output: "1.5E6"

console.log(formatter.format(1500000000));
// Output: "1.5E9"

フォーマッターは、数値の大きさに基づいて適切な指数を自動的に選択します。指数は常に3の倍数であり、SI接頭辞との整合性が保証されます。

正しい指数や係数を計算する必要はありません。Intl APIが数値の値に基づいてこれらの計算を処理します。

工学表記法が異なる大きさをどのようにフォーマットするか

工学表記法は、非常に小さい数値から非常に大きい数値まで、あらゆるスケールで適用されます。異なる大きさが指数にどのようにマッピングされるかを理解することで、出力を予測できます。

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

console.log(formatter.format(0.0015));
// Output: "1.5E-3"

console.log(formatter.format(0.0000015));
// Output: "1.5E-6"

console.log(formatter.format(1.5));
// Output: "1.5E0"

console.log(formatter.format(1500));
// Output: "1.5E3"

console.log(formatter.format(1500000));
// Output: "1.5E6"

console.log(formatter.format(1500000000));
// Output: "1.5E9"

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

const noDecimalsFormatter = new Intl.NumberFormat("en-US", {
  notation: "engineering",
  maximumFractionDigits: 0
});

console.log(noDecimalsFormatter.format(1234567));
// Output: "1E6"

const twoDecimalsFormatter = new Intl.NumberFormat("en-US", {
  notation: "engineering",
  maximumFractionDigits: 2
});

console.log(twoDecimalsFormatter.format(1234567));
// Output: "1.23E6"

maximumFractionDigitsオプションは、係数の小数点以下に表示される桁数を制限します。これを0に設定すると、すべての小数点以下の桁が削除され、係数の整数部分のみが表示されます。

複数の数値間で一貫した書式を維持するために、小数点以下の最小桁数を指定することもできます。

const formatter = new Intl.NumberFormat("en-US", {
  notation: "engineering",
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
});

console.log(formatter.format(1000));
// Output: "1.00E3"

console.log(formatter.format(1500));
// Output: "1.50E3"

console.log(formatter.format(1234567));
// Output: "1.23E6"

これにより、すべての数値が正確に小数点以下2桁で表示され、表やレポートでの視覚的な一貫性を維持できます。

工学表記がロケール間でどのように機能するか

工学表記は、小数点記号に関する異なるロケールの規則に適応します。指数の形式は一貫していますが、係数の書式はロケールに基づいて変化します。

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

console.log(enFormatter.format(1234567));
// Output: "1.235E6"

const deFormatter = new Intl.NumberFormat("de-DE", {
  notation: "engineering"
});

console.log(deFormatter.format(1234567));
// Output: "1,235E6"

const frFormatter = new Intl.NumberFormat("fr-FR", {
  notation: "engineering"
});

console.log(frFormatter.format(1234567));
// Output: "1,235E6"

英語では係数の小数点記号としてピリオドを使用します。ドイツ語とフランス語では小数点記号としてカンマを使用します。Eと指数はすべてのロケールで同じままです。

このローカライゼーションは係数部分にのみ適用されます。Eを使用した指数表記と指数値は国際的な科学的慣例に従い、ロケール間で変化しません。

工学表記と他の書式オプションの組み合わせ

工学表記は他の数値書式オプションと併用できます。工学表記を使用しながら、丸め、有効桁数、符号表示を制御できます。

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

console.log(formatter.format(1500000));
// Output: "+1.5E6"

console.log(formatter.format(-1500000));
// Output: "-1.5E6"

signDisplayオプションは、正の数値にプラス記号を表示するかどうかを制御します。"always"に設定すると、正と負の両方の値に符号が表示されます。

小数点以下の桁数の代わりに有効桁数を制御することもできます。

const formatter = new Intl.NumberFormat("en-US", {
  notation: "engineering",
  minimumSignificantDigits: 4,
  maximumSignificantDigits: 4
});

console.log(formatter.format(1234567));
// Output: "1.235E6"

console.log(formatter.format(1567890));
// Output: "1.568E6"

minimumSignificantDigitsmaximumSignificantDigitsオプションは、小数点以下の桁数だけでなく、係数の有効数字の総数を制御します。

工学表記を使用するタイミング

工学表記は、測定値がSI単位接頭辞を使用する技術的な文脈で最も効果的です。電子機器のドキュメント、科学論文、工学仕様書では、この表記法が一般的に使用されます。

4.7×10⁻⁶ファラドのコンデンサを含む回路を文書化する際、工学表記では値を4.7E-6と表示します。エンジニアはこれを4.7マイクロファラドとして即座に認識します。2.4×10⁹ヘルツの周波数を表示する場合、工学表記では2.4E9と表示され、エンジニアはこれを2.4ギガヘルツとして認識します。

この表記法は、指数表記を理解できない一般的なオーディエンスにはあまり適していません。ソーシャルメディアのカウンター、eコマースの価格、消費者向けダッシュボードでは、代わりに標準表記またはコンパクト表記を使用する必要があります。

精度が重要で、すべての桁が重要な場合は、工学表記を使用しないでください。財務計算、法的文書、監査証跡には、正確な10進数表現が必要です。銀行残高は1.23456E3ではなく、$1,234.56と表示する必要があります。

オーディエンスを考慮してください。エンジニア、物理学者、技術専門家は工学表記を期待し、理解しています。一般消費者は標準表記またはコンパクト表記の方が読みやすいと感じます。