Как форматировать числа в инженерной нотации
Используйте инженерную нотацию для отображения чисел с экспонентами, соответствующими префиксам единиц СИ
Введение
Инженерная нотация — это способ записи чисел с использованием степеней числа 10, где показатель степени всегда кратен 3. Вместо того чтобы отображать 123,000,000 как 1.23×10⁸, инженерная нотация отображает это как 123×10⁶. Такое выравнивание по кратным 3 соответствует префиксам Международной системы единиц (СИ), таким как кило (10³), мега (10⁶) и гига (10⁹).
Эта нотация часто используется в инженерии, электронике и научных контекстах, где измерения используют префиксы СИ. Конденсатор с номиналом 4.7×10⁻⁶ фарад становится 4.7 микрофарад. Частота 2.4×10⁹ герц становится 2.4 гигагерц. Инженерная нотация делает такие преобразования естественными, поскольку показатель степени напрямую соответствует префиксу СИ.
JavaScript предоставляет встроенную поддержку инженерной нотации через API Intl.NumberFormat. Этот 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. Он также отличается от компактной нотации, которая использует буквы, такие как K, M и B, для обозначения величин. Инженерная нотация явно показывает степень числа 10 с использованием экспоненциальной записи.
Почему инженерная нотация использует кратные трём
Ограничение на кратные 3 существует, потому что префиксы единиц СИ увеличиваются или уменьшаются в 1000 раз. Каждый шаг вверх по шкале префиксов умножает на 10³, а каждый шаг вниз делит на 10³.
Рассмотрим префиксы СИ для степеней числа 10:
- 10³ = кило (k)
- 10⁶ = мега (M)
- 10⁹ = гига (G)
- 10¹² = тера (T)
- 10⁻³ = милли (m)
- 10⁻⁶ = микро (μ)
- 10⁻⁹ = нано (n)
- 10⁻¹² = пико (p)
Когда число записано в инженерной нотации с показателем степени 6, это соответствует префиксу мега. Когда показатель степени -9, это соответствует префиксу нано. Эта прямая связь делает инженерную нотацию удобной для технических областей, где доминируют единицы СИ.
Без этого ограничения вам пришлось бы выполнять арифметические вычисления в уме, чтобы преобразовать между нотацией и префиксами СИ. С ограничением преобразование становится мгновенным.
Чем инженерная нотация отличается от научной нотации
Научная нотация также выражает числа с использованием степеней числа 10, но использует наименьший возможный показатель степени. Число 987,654,321 в научной нотации становится 9.87654321×10⁸, записываемым как 9.87654321E8.
Научная нотация всегда размещает ровно одну ненулевую цифру перед десятичной точкой. Инженерная нотация позволяет до трёх цифр перед десятичной точкой, чтобы показатель степени был кратен 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, размещая одну цифру перед десятичной точкой. Инженерный форматтер выдаёт 987.654E6, размещая три цифры перед десятичной точкой, чтобы получить показатель степени 6 вместо 8.
Обе нотации представляют одно и то же значение, но инженерная нотация отдаёт приоритет соответствию префиксам СИ, а не минимизации показателя степени.
Использование инженерной нотации в JavaScript
Опция notation в Intl.NumberFormat управляет тем, как числа отображаются. Установка значения "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, что обеспечивает соответствие с префиксами СИ.
Вам не нужно вычислять правильный показатель степени или коэффициент. API Intl выполняет эти вычисления на основе значения числа.
Как инженерная нотация форматирует числа разных величин
Инженерная нотация применяется ко всем масштабам, от очень маленьких до очень больших чисел. Понимание того, как разные величины соотносятся с показателями степени, помогает предсказать результат.
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"
Это гарантирует, что все числа показывают ровно два десятичных знака, что помогает поддерживать визуальную согласованность в таблицах и отчетах.
Как работает инженерная нотация в разных локалях
Инженерная нотация адаптируется к различным локальным соглашениям о десятичных разделителях. Формат экспоненты остается неизменным, но форматирование коэффициента меняется в зависимости от локали.
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 управляют общим количеством значимых цифр в коэффициенте, а не только десятичными знаками.
Когда использовать инженерную нотацию
Инженерная нотация лучше всего подходит для технических контекстов, где измерения используют префиксы единиц СИ. Документация по электронике, научные статьи и инженерные спецификации часто используют эту нотацию.
При документировании цепи с конденсатором на 4,7×10⁻⁶ фарад инженерная нотация отображает значение как 4.7E-6. Инженеры сразу понимают это как 4,7 микрофарада. При отображении частоты 2,4×10⁹ герц инженерная нотация показывает 2.4E9, что инженеры распознают как 2,4 гигагерца.
Эта нотация менее подходит для широкой аудитории, которая может не понимать экспоненциальную нотацию. Счетчики в социальных сетях, цены в интернет-магазинах и пользовательские панели должны использовать стандартную или компактную нотацию.
Не используйте инженерную нотацию, когда важна точность и значение всех цифр. Финансовые расчеты, юридические документы и аудиторские записи требуют точного десятичного представления. Баланс на банковском счете должен отображаться как $1,234.56, а не 1.23456E3.
Учитывайте свою аудиторию. Инженеры, физики и технические специалисты ожидают и понимают инженерную нотацию. Для широкой аудитории стандартная или компактная нотация будет более понятной.