Числа

1. Введение

Все числа в JavaScript, как целые так и дробные, имеют тип Number и записывать их можно не только в десятичной системе счисления.

2. Приведение к числу

Большинство арифметических операций и математических функций преобразуют значение в число автоматически. Для того чтобы сделать это явно, используйте функцию Number(val), передавая ей в val то, что надо привести к числу.

Если значние не возможно привести к числу, результатом будет специальное значение NaN (Not a Number). Аналогичным образом происходит преобразование и в других математических операторах и функциях.

const valueA = '5';
console.log(Number(valueA)); // 5
console.log(typeof Number(valueA)); // 'number'

const valueB = 'random string';
console.log(Number(valueB)); // NaN
console.log(typeof Number(valueB)); // 'number'

3. Number.parseInt() и Number.parseFloat()

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

// Парсит из строки целое число
console.log(Number.parseInt('5px')); // 5
console.log(Number.parseInt('12qwe74')); // 12
console.log(Number.parseInt('12.46qwe79')); // 12
console.log(Number.parseInt('qweqwe')); // NaN

// Парсит из строки дробное число
console.log(Number.parseFloat('5px')); // 5
console.log(Number.parseFloat('12qwe74')); // 12
console.log(Number.parseFloat('12.46qwe79')); // 12.46
console.log(Number.parseFloat('qweqwe')); // NaN

4. Проверка на число

Для проверки на число можно использовать метод Number.isNaN(val). Он проверяет, является ли указанное значение NaN или нет. Этот метод отвечает на вопрос "Это Not A Number?" и возвращает:

  • true — если значение val это NaN

  • false — если значение val это не NaN

Для всех значений val кроме NaN, при передаче в Number.isNaN(val) вернёт false. Этот метод не производит попытку преобразовать val к числу, а просто выполняет проверку на NaN.

5. Сложение чисел с плавающей точкой

При сложении не целых чисел в JavaScript, и других языках программирования, есть особенность. Если кратко, то 0.1 + 0.2 не равно 0.3, результат сложения больше чем 0.3. Все от того что машина считает в двоичной системе.

Число 0.1 в двоичной системе счисления - это бесконечная дробь, так как единица на десять в двоичной системе не делится. Также бесконечной дробью является 0.2. Двоичное значение бесконечных дробей хранится только до определенного знака, поэтому возникает неточность. При сложении 0.1 и 0.2, две неточности складываются, получается незначительная, но всё же ошибка в вычислениях.

Конечно, это не означает, что точные вычисления для таких чисел невозможны. Есть несколько методов решения этой проблемы:

  • Сделать их целыми, умножив на 10, сложить, а потом результат разделить на 10

  • Сложить, а затем округлить до разумного знака после запятой. Округления до 10-го знака обычно бывает достаточно, чтобы отсечь ошибку вычислений

6. Объект Math

Один из встроенных объектов в язык. Предоставляет набор методов для работы с числами. Знание всех методов наизусть не требуется, только некоторых, наиболее полезных.

Документация Math на MDN

Last updated