Тип данных Number в JS

В этой статье вы подробнее познакомитесь с типом данных Number в JavaScript.

Number — это примитивный тип данных, который представляет числовые значения.

В отличие от других языков программирования, в JavaScript не нужно указывать тип числовой переменной: int, float и т.д. И целые числа, и числа с плавающей точкой — все в одном типе Number. 

const a = 3;
const b = 3.13;

Чтобы задать очень большое или очень маленькое число, можно использовать экспоненту — e.

const a1 = 5e9;
console.log(a1); // Вывод: 5000000000

const a2 = 5e-5;
console.log(a2); // Вывод: 0.00005

Еще числа можно задавать в шестнадцатеричной системе счисления. Перед самим числом при этом нужно добавить 0x — так вы укажете JavaScript, что число записано в шестнадцатеричной форме. 

const a = 0xff;
console.log(a); // Вывод: 255

const b = 0x00 ;
console.log(b); // Вывод: 0

Оператор + с числами

Если использовать оператор + с двумя числами, числа сложатся.

Если использовать оператор со строкой и числом, числа «соединятся». 

const a = '4' + 9;
console.log(a); // Вывод: 49

Так происходит, потому что если одно из числе записано строкой — второе тоже превратится в строку. А со строками оператор + используется для конкатенации — соединяния строк.

С остальными арифметическими операторами все работает наоборот. Сначала строка превращается в число, а затем производится операция.  

const a = '4' - 2;
console.log(a); // 2

const a = '4' / 2;
console.log(a); // 2

const a = '4' * 2;
console.log(a); // 8

Значение NaN

NaN (Not A Number) — это ключевое слово, которое означает, что определенное значение не является числом. 

Например, NaN — результат арифметических операций между числами и строками. Исключение — оператор +

const a = 4 - 'привет';
console.log(a); // Вывод: NaN

Определить, является ли значение числом, можно с помощью встроенной функции isNaN().

const a = isNaN(9);
console.log(a); // Вывод: false

const a = isNaN(4 - 'привет');
console.log(a); // Вывод: true

Если использовать оператор typeof для NaN-значения, получится "number".

const a = 4 - 'привет';
console.log(a); // Вывод: NaN
console.log(typeof a); // Вывод: "number"

Бесконечность

Если результат вычисления превышает наибольшее или наименьшее возможное число, возвращается Infinity или -Infinity соответственно.

const a = 2 / 0;
console.log(a); // Вывод: Infinity

const a = -2 / 0;
console.log(a); // Вывод: -Infinity

Тип BigInt

Тип Number позволяет хранить только числа меньше (2³⁵ - 1) и больше -(2³⁵ - 1). Если необходимо использовать большего размера, можно воспользоваться типом BigInt.

Чтобы создать число типа BigInt, достаточно добавить к числу букву n.

// значение BigInt
const value = 900719925124740998n;

// складываем два BigInt числа
const value1 = value + 1n;
console.log(value1); // Вывод: "900719925124740999n"

Примечание. BigInt добавили в JavaScript недавно, он поддерживается не во всех браузерах. Проверить, где работает BigInt, можно на странице JavaScript BigInt browser support.

Числа — в 64-битном формате

В JavaScript числа хранятся в 64-битном формате IEEE-754, также известном как «числа с плавающей точкой двойной точности».

Само число хранится в позициях с 0 по 51 бит, экспонента — в позициях с 52 по 62 бит, а знак — на 63 позиции.

Число Экспонента Знак
52 бита (0–51) 11 бита (52–62) 1 бит (63)

Проблема потери точности

Операции над числами с плавающей точкой иногда приводят к неожиданным результатам. Это происходит из-за потери точности.

const a = 0.1 + 0.2;
console.log(a); // Вывод: 0.30000000000000004

Результат операции 0.1 + 0.2 должен быть 0.3, но JS выводит 0.300000000000000000004. Эта ошибка возникает потому, что в JavaScript числа хранятся в двоичной форме для внутреннего представления десятичных цифр. А десятичные дроби нельзя точно представить в двоичной форме.

Чтобы решить проблему, можно сделать так: 

const a = (0.1 * 10 + 0.2 * 10) / 10;
console.log(a); // Вывод: 0.3

Еще вариант — использовать метод toFixed().

const a = 0.1 + 0.2;
console.log(a.toFixed(2)); // Вывод: 0.30

toFixed(2) округляет десятичную дробь до двух знаков после запятой. 

Примечание. Целые числа точны до 15 цифр.

const a = 9999999999999999
console.log(a); // Вывод: 10000000000000000

Числа как объекты

Создавать числа можно и с помощью ключевого слова new — как объекты.

const a = 45;

// создание объекта число
const b = new Number(45);

console.log(a); // Вывод: 45
console.log(b); // Вывод: 45

console.log(typeof a); // Вывод: "number"
console.log(typeof b); // Вывод: "object"

Примечание. Не рекомендуется использовать числовые объекты — это замедляет работу программы.

Методы чисел

Метод Описание
isNaN()  Определяет, является ли переданное значение NaN.
isFinite() Определяет, является ли переданное значение конечным числом.
isInteger()

Определяет, является ли переданное значение целым числом.

isSafeInteger() Определяет, является ли переданное значение безопасным целым числом.
parseFloat(строка) Разбирает строковый аргумент и возвращает число с плавающей запятой.
parseInt(строка) Разбирает строковый аргумент и возвращает целое число.
toExponential() Возвращает строку, представляющую объект Number в экспоненциальной записи.
toFixed() Форматирует число, используя запись с фиксированной запятой.
toPrecision()  Возвращает строку, представляющую объект Number с указанной точностью.
toString() Возвращает строковое представление указанного объекта Number.
valueof() Возвращает примитивное значение объекта Number.
toLocaleString() Возвращает строку с языкозависимым представлением даты. 

Давайте рассмотрим некоторые методы на примере:

// проверяем, является ли a — целым числом
const a = 12;
console.log(Number.isInteger(a)); // Вывод: true

// проверяем, является ли b значением NaN
const b = NaN;
console.log(Number.isNaN(b)); // Вывод: true

// выводим нецелое число с точностью до двух цифр после запятой
const d = 5.1234;
console.log(d.toFixed(2)); // Вывод: 5.12

Свойства объекта Number 

Вот некоторые свойства объекта Number:

Свойство Описание
EPSILON Представляет собой разницу между единицей и наименьшим значением, большим единицы, которое может быть представлено типом Number.
MAX_SAFE_INTEGER Представляет максимальное безопасное целочисленное значение в JavaScript — (2³⁵ - 1).
MAX_VALUE Представляет максимальное числовое значение, представимое в JavaScript.
MIN_SAFE_INTEGER Представляет минимальное безопасное целочисленное значение в JavaScript — -(2³⁵ - 1).
MIN_VALUE

Представляет минимальное положительное числовое значение, представимое в JavaScript.

NaN Представляет «не число».
NEGATIVE_INFINITY Представляет положительную бесконечность.
POSITIVE_INFINITY Представляет отрицательную бесконечность.
prototype Позволяет добавлять свойства к объектами Number.

Рассмотрим некоторые свойства на примере: 

// наибольшее возможное числовое значение
const a = Number.MAX_VALUE;
console.log(a); // 1.7976931348623157e+308

// максимально возможное безопасное числовое значение
const a = Number.MAX_SAFE_INTEGER;
console.log(a); // 9007199254740991

Функция Number()

Функция Number() позволяет преобразовать разные типы данных в тип данных Number.

const a = '23'; // тип string
const b = true; // тип boolean

// преобразовываем в число
const result1 = Number(a);
const result2 = Number(b);

console.log(result1); // Вывод: 23
console.log(result2); // Вывод: 1
codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©