Информация к новости
  • Просмотров: 1142
  • Автор: sulicompany
  • Дата: 16-07-2012, 00:10
 (голосов: 0)
16-07-2012, 00:10

Правильные окончания слов

Категория: Программирование » JavaScript


Правильные окончания слов
Actionscript 3.0, PHP

Функция может пригодится, если нужно изменять окончание существительного при указании количества чего-либо.

Логика:
Может быть всего 3 формы существительного.
Рассмотрим на примере слова "День".
0 - дней
1 - день
2 - дня

Окончание зависит от последних двух цифр числа (остаток при делении на 100).
Если остаток от 5 до 20, то всегда 0 - "дней".
Дальше достаточно последней цифры числа (остаток при делении на 10).
Если остаток 0 или от 5 до 9, то будет значение 0 - "дней".
Если 1, то значение 1 - "день".
Если от 2 до 4, то значение 2 - "дня".

ActionScript 3.0

  1. function num_ending(number) {
  2.     var endings = ['дней','день','дня'];
  3.     var num100 = number % 100;
  4.     var num10 = number % 10;
  5.     if (num100 >= 5 && num100 <= 20) {
  6.         return endings[0];
  7.     } else if (num10 == 0) {
  8.         return endings[0];
  9.     } else if (num10 == 1) {
  10.         return endings[1];
  11.     } else if (num10 >= 2 && num10 <= 4) {
  12.         return endings[2];
  13.     } else if (num10 >= 5 && num10 <= 9) {
  14.         return endings[0];
  15.     } else {
  16.         return endings[2];
  17.     }
  18. }
  19.  
  20. var days = 50;
  21. trace(days + ' ' + num_ending(days));
  22. days = 51;
  23. trace(days + ' ' + num_ending(days));
  24. days = 52;
  25. trace(days + ' ' + num_ending(days));




PHP

  1. <?php
  2. function num_ending($number) {
  3.     $endings = Array('дней','день','дня');
  4.     $num100 = $number % 100;
  5.     $num10 = $number % 10;
  6.      ($num100 >= 5 && $num100 <= 20) {
  7.          $endings[0];
  8.     }   ($num10 == 0) {
  9.          $endings[0];
  10.     }   ($num10 == 1) {
  11.          $endings[1];
  12.     }   ($num10 >= 2 && $num10 <= 4) {
  13.          $endings[2];
  14.     }   ($num10 >= 5 && $num10 <= 9) {
  15.          $endings[0];
  16.     }  {
  17.          $endings[2];
  18.     }
  19. }
  20.  
  21. $days = 50;
  22.  $days.' '.num_ending($days).'<br />';
  23. $days = 51;
  24.  $days.' '.num_ending($days).'<br />';
  25. $days = 52;
  26.  $days.' '.num_ending($days).'<br />';
  27.  
  28. ?>