На главную

Текст

Согласование числительных

«1 файл, 2 файла, 5 файлов» — подберите три формы, проверьте их на числах и заберите готовый хелпер в проект.

Три формы слова

1, 21, 101

2–4, 22–24, 1,5

5–20, 0, 11–14

Как это выглядит на числах

0 файлов

1 файл

2 файла

5 файлов

11 файлов

12 файлов

21 файл

22 файла

25 файлов

100 файлов

101 файл

111 файлов

7 файлов

Готовый хелпер

export function plural(n, forms) {
  const abs = Math.abs(n);
  if (!Number.isInteger(abs)) return forms[1];
  const mod10 = abs % 10;
  const mod100 = abs % 100;
  if (mod10 === 1 && mod100 !== 11) return forms[0];
  if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) return forms[1];
  return forms[2];
}

plural(5, ['файл', 'файла', 'файлов']); // файлов

Как работает правило

  • Форма 1 — когда число оканчивается на 1, кроме 11: «21 файл», но «11 файлов».
  • Форма 2 — на 2, 3, 4, кроме 12–14: «23 файла», но «13 файлов».
  • Форма 3 — всё остальное, включая 0 и 5–20.
  • Дробное число всегда берёт вторую форму: «1,5 файла», а не «1,5 файл».