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.14Number()
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.3Infinity
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
Проверь себя
- Чем
Math.floorотличается отMath.trunc? - Почему
0.1 + 0.2 !== 0.3? - Как получить случайное число от 1 до 100?