Подводные камни с использованием научной нотации В 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 в середине года Разбирательства