← Назад к вопросам

Как работает FlatMap?

2.2 Middle🔥 141 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как работает Math.floor

Определение и базовое использование

Math.floor() — это встроенная функция JavaScript, которая округляет число в МЕНЬШУЮ сторону до ближайшего целого числа. Она всегда возвращает целое число, меньшее или равное исходному значению. Это один из методов математического округления, но с чётким и предсказуемым поведением.

Базовые примеры

// Положительные числа
Math.floor(4.9); // 4
Math.floor(4.1); // 4
Math.floor(4.0); // 4

// Отрицательные числа (важно!)
Math.floor(-4.1); // -5 (не -4!)
Math.floor(-4.9); // -5
Math.floor(-4.0); // -4

// Целые числа
Math.floor(10); // 10

// Очень большие числа
Math.floor(999999.99); // 999999

Ключевой момент: Math.floor ВСЕГДА округляет вниз (к минус бесконечности), независимо от того, положительное или отрицательное число.

Внутренний механизм

Мath.floor работает в три этапа:

// 1. Преобразует аргумент в число
Math.floor('5.7'); // 5 (преобразует строку в число)
Math.floor(true);  // 1 (true преобразуется в 1)
Math.floor(false); // 0 (false преобразуется в 0)

// 2. Если результат уже целое число — возвращает его
Math.floor(10); // 10

// 3. Иначе возвращает ближайшее целое число вниз
Math.floor(10.99); // 10

// На очень больших числах может быть потеря точности
// (это ограничение JavaScript, а не Math.floor)
Math.floor(Number.MAX_SAFE_INTEGER + 1); // 9007199254740992

Отличие от других методов округления

const number = 4.5;

// Math.floor - округляет вниз
Math.floor(number); // 4

// Math.ceil - округляет вверх
Math.ceil(number); // 5

// Math.round - округляет к ближайшему целому
Math.round(number); // 4 (по стандартному правилу)

// Math.trunc - обрезает дробную часть
Math.trunc(number); // 4

const negative = -4.5;

Math.floor(negative);  // -5 (вниз)
Math.ceil(negative);   // -4 (вверх)
Math.round(negative);  // -4 (ближайшее)
Math.trunc(negative);  // -4 (обрезает дробь)

Практические примеры использования

Расчёт количества страниц

function calculatePages(totalItems, itemsPerPage) {
  return Math.floor(totalItems / itemsPerPage);
}

calculatePages(25, 10); // 2 (две полные страницы)
calculatePages(26, 10); // 2 (третья страница не полная)

// Если нужны ВСЕ страницы (включая неполную):
function calculatePagesAll(totalItems, itemsPerPage) {
  return Math.ceil(totalItems / itemsPerPage);
}

calculatePagesAll(25, 10); // 3

Работа с позициями и индексами

// Получить случайный элемент из массива
function getRandomElement(array) {
  const randomIndex = Math.floor(Math.random() * array.length);
  return array[randomIndex];
}

const items = ['apple', 'banana', 'cherry', 'date'];
console.log(getRandomElement(items)); // случайный элемент

// Math.random() возвращает число от 0 до 1 (не включая 1)
// 0.7 * 4 = 2.8
// Math.floor(2.8) = 2
// items[2] = 'cherry'

Работа с временем и координатами

// Преобразование миллисекунд в секунды
function getSeconds(milliseconds) {
  return Math.floor(milliseconds / 1000);
}

getSeconds(3456); // 3 полные секунды
getSeconds(3999); // 3 полные секунды (не 4!)

// Работа с пиксельными координатами
function roundCoordinate(value) {
  return Math.floor(value);
}

roundCoordinate(123.7); // 123 (целое число пикселей)

Разделение значения на целую и дробную части

function splitNumber(num) {
  const integerPart = Math.floor(num);
  const decimalPart = num - integerPart;
  
  return { integerPart, decimalPart };
}

splitNumber(4.75); // { integerPart: 4, decimalPart: 0.75 }
splitNumber(-4.75); // { integerPart: -5, decimalPart: 0.25 }

Производительность и особенности

// Math.floor — это очень быстая операция
// Её часто используют для оптимизации

// Альтернативный способ: побитовое И (быстрее)
const num = 4.9;
num | 0; // 4
~~num;   // 4

// Но это работает только для положительных чисел!
-4.9 | 0;  // -4 (не -5!)
Math.floor(-4.9); // -5 (правильно)

// Поэтому Math.floor безопаснее

Типичные ошибки

// Ошибка 1: забыть о поведении с отрицательными числами
const discount = -0.3;
const price = 100;
const finalPrice = price + Math.floor(discount * price);
// -0.3 * 100 = -30
// Math.floor(-30) = -30
// finalPrice = 70 (ожидали 70? Да, работает!)

// Но:
const testValue = -100.1;
Math.floor(testValue); // -101 (не -100!)

// Ошибка 2: использовать Math.floor без преобразования типа
Math.floor('10.5'); // 10 (строка преобразуется)
Math.floor(null);   // 0 (null преобразуется)
Math.floor(undefined); // NaN (undefined не преобразуется)

Когда использовать Math.floor

  • Расчёт количества полных единиц (страницы, порции, дни)
  • Получение целой части числа
  • Генерация случайных целых чисел
  • Работа с пиксельными координатами
  • Разбиение времени на целые единицы

Итоговый принцип

Math.floor('округляет вниз' — это его основная и единственная функция. Помни: для отрицательных чисел 'вниз' означает в сторону минус бесконечности, что может быть контринтуитивным. Если это не нужно, используй Math.trunc для обрезания дробной части или Math.round для стандартного округления.