Как правильно выбрать склонение "дней"/"дня" в зависимости от числа?
У меня есть приложение написанное на Flutter, которое позволяет составлять запись о прошедшем дне. Также я написал код, который показывает, какое количество дней прошло с момента последней записи. Но возникла загвоздка: как сделать так, чтобы слово "день" склонялось правильно, в зависимости от числа (пропущено N "дней", "дня", "день").
final currentDate = entry.value[0].date;
final previousDate = prevEntry.value.last.date;
if (previousDate.difference(currentDate).inDays > 1) {
yield SliverPadding(
padding: const EdgeInsets.symmetric(vertical: 10),
sliver: SliverToBoxAdapter(
child: Center(
child:
Text('Пропущено ${previousDate.difference(currentDate).inDays} дней'),
),
),
);
}
Код, который отвечает как раз за вывод числа пропущенных дней
Ответы (2 шт):
Автор решения: MipZ
→ Ссылка
Решил проблему следующим образом:
String _getDatAddition(int days) {
final double preLastDigit = days % 100 / 10;
if (preLastDigit == 1) {
return 'Пропущено $days дней';
}
switch (days % 10) {
case 1:
return 'Пропущен $days день';
case 2:
case 3:
case 4:
return 'Пропущено $days дня';
default:
return 'Пропущено $days дней';
}
Автор решения: Twwan
→ Ссылка
Буквально вчера то же самое надо было сделать. Сделал пока так:
static String _getNounForm(int number, List<String> forms) {
int lastDigit = number % 10;
int lastTwoDigits = number % 100;
if (lastTwoDigits >= 11 && lastTwoDigits <= 14) {
return forms[2];
}
if (lastDigit == 1) {
return forms[0];
}
if (lastDigit >= 2 && lastDigit <= 4) {
return forms[1];
}
return forms[2];
}
String monthsString = _getNounForm(months, ['месяц', 'месяца', 'месяцев']);
String daysString = _getNounForm(days, ['день', 'дня', 'дней']);
return '$months $monthsString $days $daysString';