Найти тему
Nuances of programming

JavaScript Essentials: числа и математика

Оглавление

Источник: Nuances of Programming

Essentials — это рубрика, в которой мы рассматриваем наиболее используемые и важные методы для выбранной темы, затрагивая некоторые базовые понятия. Этот пост посвящён числам и математике.

Требования

Рекомендую сначала разобраться в типах и хоть немного, в математике:

Числа в JavaScript. Основы.

О чём это говорит? Все числа в 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.isSafeIntegerNumber.MIN_SAFE_INTEGER, и Number.MAX_SAFE_INTEGER.

safe numbers
safe numbers

Как определить, является ли число целочисленным?

В любом случае, все числа в JS одного типа.

Number.isInteger
Number.isInteger

Как изменить количество знаков после запятой?

Number.toFixed
Number.toFixed
Number.toPrecision
Number.toPrecision

Экспоненциальная запись

Другими словами: «запись по-научному».

Number.toExponential
Number.toExponential

Глобальные Функции vs Number.method

Возможно, вы уже знаете о глобальных функциях, таких как parseInt. Я показал только Number.parseInt().

JS старается отойти от использования глобальных функций и вместо них использовать модули. Новые модульные методы обновляются, а старые глобальные функции нет. isNan() отличается от umber.isNan()

Работа с большими числами

Предупреждение: «ванильный» метод, который я показываю ниже, в настоящее время не доступен для использования (можете протестировать его в консоли chrome). О его перспективах читайте здесь.

BigInt
BigInt

Пока BigInt недоступен, используйте библиотеку.

MikeMcl/bignumber.js
A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic — MikeMcl/bignumber.jsgithub.com

Конвертация в другую систему исчисления.

toString, parseInt
toString, parseInt

Методы для литералов

Возможно вы уже пробовали использовать метод с литеральными числами в консоли и получали ошибку 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 .

Object.is, Number.isNaN, isNaN
Object.is, Number.isNaN, isNaN

Способы округлить число

floor, ceil, round, toFixed, toPrecision, bit shift
floor, ceil, round, toFixed, toPrecision, bit shift

Экспоненты

** pow **
** pow **

Генерация случайного числа

Math.random
Math.random

Математические функции

Я включил лишь несколько 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