Подводные камни с использованием научной нотации В JavaScript

этот вопрос не поиск мнений по форматированию кода разработчика. Лично я предпочитаю использовать научную нотацию в моем коде JS, когда могу, потому что я считаю, что это более читаемо. Для меня,6e8 более читаем, чем 600000000. При этом я ищу только потенциальные риски и недостатки, указывающие номера в научной нотации в JS. Я не часто вижу это в дикой природе и задавался вопросом, есть ли технические причины для этого или это просто из-за разработчики druthers.

3 ответов


вы не видите научных обозначений "часто в дикой природе" потому что единственными числами, которые фактически вводятся в JS, как правило, являются константы:

  • константы, ориентированные на код (такие как перечисления и уровни), как правило, малы.
  • физико-математические константы (такие как π или e), как правило, весьма специфичны.

ни один из них не выигрывает от научной нотации слишком много.

Я видел планка константа 'in the wild' as:

const h = 6.62607004e-34;
console.log('Plank', h);

другое место, где это часто имеет смысл, - это временные ограничения, например, количество МС в день как 864e5. Например:

function addDaysToDate(date, days) {
  if (days === 0)
    return date;
  date.setTime(864e5 * days + date.valueOf());
  return date;
}

const now = new Date();
const thisTimeTomorrow = addDaysToDate(now, 1);
console.log('This time tomorrow', thisTimeTomorrow);

Я не думаю, что есть какие-либо технические причины не использовать эту нотацию, это больше, что разработчики избегают жестких номеров кодирования вообще.

Я не думаю, что есть какие-то риски. Возможно, вам придется быть осторожным с числами в но если вы это делаете, то этот синтаксис намного меньше, чем, скажем, локализация чисел (например, пользователь DE, вводящий "20.000,00", ожидая 2e4, но 2e6 благодаря инвариантному форматированию чисел, заменяющему тысячные и десятичные разделители).

Я бы добавил, что JS будет выводить этот синтаксис по умолчанию в любом случае для небольших чисел, но избегает больших чисел до точки (которая зависит от браузера):

console.log('Very small', 1234 / 100000000000)
console.log('Large, but still full in some browsers', 1e17 * 1234)
console.log('Large, scientific', 1e35 * 1234)

от О. Р. маппер в этой вопрос:

люди не единственные, кто хочет читать цифры. Кажется D3 выдаст исключение при встрече с translate преобразование, содержащее координаты в научной нотации

кроме того, если вы хотите изменить строковое представление, в отличие от того, как выглядит литерал в вашем источнике, вам придется быть осторожным с сериализованными/сохраненными данными.

кроме того, из опыта, часто вы можете иметь большие числа, значение которых заключается в их отдельных цифрах, таких как идентификатор или номер телефона. В этом случае сокращение этих чисел до научной нотации вредит читаемости.


е-нотации указывает число, которое должно быть умножено на 10 поднятых к данной власти.

не является научной экспоненциальной нотацией . Одна из ловушек в том, что e в JavaScript нет The number e база естественного логарифма, представленная в браузере как Math.E. Для лиц, знакомых с математической константой e, JavaScript e имеет совершенно другое значение. 6 * Math.pow(10, 8) возвращает ожидаемый результат и не включает использование артефакта JavaScript e.

хотя E означает экспоненту, обычно упоминается обозначение в качестве (научной) электронной нотации, а не (научной) экспоненциальной нотация. Использование электронных обозначений облегчает ввод и считывание данных в текстовой связи, так как она минимизирует нажатия клавиш, избегает уменьшенный размеры шрифта и обеспечивает более простой и лаконичный дисплей, но это не поощряется в публикациях. руководящие принципы представления для авторов: ВМУ 2010 в середине года Разбирательства