JS Tower
JavaScript & TypeScriptМодуль 3: Строки и числа

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

Методы Math и преобразование чисел

Цель урока

В этом уроке ты научишься:

  • Использовать объект Math
  • Преобразовывать строки в числа
  • Форматировать числа

Объект Math

Округление

console.log(Math.round(4.5));  // 5 — до ближайшего
console.log(Math.round(4.4));  // 4

console.log(Math.floor(4.9));  // 4 — вниз
console.log(Math.ceil(4.1));   // 5 — вверх
console.log(Math.trunc(4.9));  // 4 — отбросить дробную часть
console.log(Math.trunc(-4.9)); // -4

Минимум и максимум

console.log(Math.max(1, 5, 3, 9, 2)); // 9
console.log(Math.min(1, 5, 3, 9, 2)); // 1

// С массивом — используй spread
let numbers = [1, 5, 3, 9, 2];
console.log(Math.max(...numbers)); // 9

Степень и корень

console.log(Math.pow(2, 3));  // 8 (2³)
console.log(Math.sqrt(16));   // 4 (√16)
console.log(Math.cbrt(27));   // 3 (∛27)

Абсолютное значение

console.log(Math.abs(-5));  // 5
console.log(Math.abs(5));   // 5

Случайное число

console.log(Math.random()); // 0.0 до 0.999...

// Случайное от 0 до 9
console.log(Math.floor(Math.random() * 10));

// Случайное от 1 до 10
console.log(Math.floor(Math.random() * 10) + 1);

// Функция для диапазона
function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

console.log(randomInt(5, 10)); // 5, 6, 7, 8, 9 или 10

Константы

console.log(Math.PI);    // 3.141592653589793
console.log(Math.E);     // 2.718281828459045

Преобразование в число

parseInt и parseFloat

console.log(parseInt("42"));       // 42
console.log(parseInt("42px"));     // 42
console.log(parseInt("abc"));      // NaN

console.log(parseFloat("3.14"));   // 3.14
console.log(parseFloat("3.14abc")); // 3.14

Number()

console.log(Number("42"));     // 42
console.log(Number("42px"));   // NaN (строже)
console.log(Number("3.14"));   // 3.14
console.log(Number(true));     // 1
console.log(Number(false));    // 0
console.log(Number(null));     // 0
console.log(Number(undefined)); // NaN

Унарный плюс

console.log(+"42");    // 42
console.log(+"3.14");  // 3.14
console.log(+"");      // 0
console.log(+"abc");   // NaN

Проверка чисел

console.log(Number.isNaN(NaN));        // true
console.log(Number.isNaN("abc"));      // false
console.log(Number.isNaN(Number("abc"))); // true

console.log(Number.isFinite(42));      // true
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(NaN));     // false

console.log(Number.isInteger(42));     // true
console.log(Number.isInteger(42.0));   // true
console.log(Number.isInteger(42.5));   // false

Используй Number.isNaN

Глобальный isNaN() сначала преобразует в число. Number.isNaN() — точнее.


Форматирование

toFixed

let num = 3.14159;

console.log(num.toFixed(2));  // "3.14"
console.log(num.toFixed(0));  // "3"
console.log(num.toFixed(4));  // "3.1416"

// Возвращает строку!
console.log(typeof num.toFixed(2)); // "string"

toPrecision

let num = 123.456;

console.log(num.toPrecision(4)); // "123.5"
console.log(num.toPrecision(2)); // "1.2e+2"

toLocaleString

let num = 1234567.89;

console.log(num.toLocaleString("ru-RU")); // "1 234 567,89"
console.log(num.toLocaleString("en-US")); // "1,234,567.89"

// С валютой
console.log(num.toLocaleString("ru-RU", {
  style: "currency",
  currency: "RUB"
})); // "1 234 567,89 ₽"

Особенности чисел

Точность

console.log(0.1 + 0.2);         // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // false

// Решение — округление
console.log((0.1 + 0.2).toFixed(1)); // "0.3"
console.log(Math.round((0.1 + 0.2) * 10) / 10); // 0.3

Infinity

console.log(1 / 0);   // Infinity
console.log(-1 / 0);  // -Infinity
console.log(Infinity + 1); // Infinity

Сводная таблица

Метод/СвойствоОписание
Math.round()Округление до ближайшего
Math.floor()Округление вниз
Math.ceil()Округление вверх
Math.max()Максимум
Math.min()Минимум
Math.random()Случайное 0-1
parseInt()Строка → целое
parseFloat()Строка → дробное
Number.isNaN()Проверка на NaN
toFixed()Форматирование

Практика

Задание 1: Округление цены

Задача: Округли цену до 2 знаков после запятой.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
19.99

Задание 2: Случайный пароль

Задача: Сгенерируй случайное 4-значное число для PIN-кода.

Loading...
Ваш вывод:

Задание 3: Парсинг данных

Задача: Извлеки число из строки "Цена: 1500 руб.".

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
1500

Проверь себя

  1. Чем Math.floor отличается от Math.trunc?
  2. Почему 0.1 + 0.2 !== 0.3?
  3. Как получить случайное число от 1 до 100?