Источник: Nuances of Programming
Essentials — это рубрика, в которой мы рассматриваем наиболее используемые и важные методы для выбранной темы, затрагивая некоторые базовые понятия. Этот пост посвящён числам и математике.
Требования
Рекомендую сначала разобраться в типах и хоть немного, в математике:
Числа в JavaScript. Основы.
- В JavaScript есть только один числовой тип. То есть 5 и 5.12 являются одним типом.
О чём это говорит? Все числа в JavaScript хранятся как числа с плавающей запятой. Вы можете ошибочно подумать, что var x = 1 — это целочисленный тип, но на самом деле это эквивалентно 1.0
Если вы дружите с числами, тогда эти ссылки для вас:
ECMAScript® 2018 Language Specification
Edit descriptionwww.ecma-international.orgHere is what you need to know about JavaScript’s Number type
Why 0.1+0.2 IS NOT equal to 0.3 and 9007199254740992 IS equal to 9007199254740993medium.com
В этой статье мы сфокусируемся на методах работы с числами.
Создание чисел и основы
Важные понятия
- В JS все числа являются числами с плавающей запятой
- В JS есть только один числовой тип данных — ‘number’
- JS как и любой другой язык ограничивает длину числа и его точность.
Общие методы
Ниже приведены блоки кода. Некоторые из них описывают сценарии/задачи, о которых я говорил выше, а другие просто демонстрируют методы.
“Safe” Numbers
“Safe” Numbers — это значения, которые гарантированно будут такими, какими вы их определили. Например, если попытаться использовать число 900719925474099164 в нашем коде, то оно превратится в 900719925474099200, потому что оно за пределами безопасного диапазона.
Как нам узнать диапазон “Safe” numbers?
Используйте следующие команды: Number.isSafeInteger, Number.MIN_SAFE_INTEGER, и Number.MAX_SAFE_INTEGER.
Как определить, является ли число целочисленным?
В любом случае, все числа в JS одного типа.
Как изменить количество знаков после запятой?
Экспоненциальная запись
Другими словами: «запись по-научному».
Глобальные Функции vs Number.method
Возможно, вы уже знаете о глобальных функциях, таких как parseInt. Я показал только Number.parseInt().
JS старается отойти от использования глобальных функций и вместо них использовать модули. Новые модульные методы обновляются, а старые глобальные функции нет. isNan() отличается от umber.isNan()
Работа с большими числами
Предупреждение: «ванильный» метод, который я показываю ниже, в настоящее время не доступен для использования (можете протестировать его в консоли chrome). О его перспективах читайте здесь.
Пока BigInt недоступен, используйте библиотеку.
MikeMcl/bignumber.js
A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic — MikeMcl/bignumber.jsgithub.com
Конвертация в другую систему исчисления.
Методы для литералов
Возможно вы уже пробовали использовать метод с литеральными числами в консоли и получали ошибку 23.toString(2) // syntax error. Как я уже упоминал в разделе «Создание чисел и основы», 23. – допустимое число и указывать 0 не обязательно.
Это значит, что когда вы выполняете 23.toString(2), JS воспринимает это как обычное число. Вообще-то, JS следовало бы понимать, что вы вызываете метод, но, увы.
Решение: выделять литералы скобками (23).toString(2) // "10111" или что-нибудь ещё более странное… 23..toString(2) Но лучше так не делать?
Нечисловое значение является числом
Я рассказывал об этом в статье JS Essentials: Types & Data Structures.
TLDR; NaN относится к объекту Number, но считается результатом математических операций, который не может считаться числом. Другими словами, название не слишком удачное. «Invalid number» или что-то похожее, звучит лучше.
Проверяйте наличие NaN
NaN-заразная штука, т.е. всё чего он касается превращается в NaN. Это единственное значение не равное самому себе. Мы можем использовать это свойство, чтобы вычислить NaN. Например, таким способом x !== x , если возвратится true, то это NaN .
Способы округлить число
Экспоненты
Генерация случайного числа
Математические функции
Я включил лишь несколько Math методов, но их намного больше, обратитесь к документации. Я не стал включать все, потому что они не требуют объяснений и нужны только в проектах со сложной математикой.
Math
Math is a built-in object that has properties and methods for mathematical constants and functions. Not a function…developer.mozilla.org
Практика
Convert a Number to a String!
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest…www.codewars.comSquare Every Digit
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest…www.codewars.comIs this a triangle?
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest…www.codewars.comPlaying with digits
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest…www.codewars.comMultiples of 3 or 5
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest…www.codewars.com
Читайте нас в телеграмме и vk
Перевод статьи CodeDraken : JavaScript Essentials: Numbers and Math