Страница 2 из 2
Re: Правильные окончания слов
Добавлено: 15 янв 2011, 22:13
Skaler
Я такое решение придумал, пусть может не самое лучшее, но работает безотказно:
Код: Выделить всё
switch ( (ns.value.toString()).charAt( (ns.value.toString()).length - 1) ) { case "1" : tf.text = " " + ns.value.toString() + " значок"; break; case "2" : case "3" : case "4" : mc_store.tf_exchange.text = " " + ns.value.toString() + " значка"; break; case "5" : case "6" : case "7" : case "8" : case "9" : case "0" : tf.text = " " + ns.value.toString() + " значков"; break; }switch ( (ns.value.toString()).charAt( (ns.value.toString()).length - 2) ) + (ns.value.toString()).charAt( (ns.value.toString()).length - 1) ) { case "11" : case "12" : case "13" : case "14" : tf.text = " " + ns.value.toString() + " значков"; break; }
ns - NumericStepper
tf - TextField
Re: Правильные окончания слов
Добавлено: 23 фев 2011, 08:57
xShinigami
Код: Выделить всё
function takesklon($n, $form = array()) { $takesklon = ($n % 10 == 1 && $n % 100 != 11 ? 0 : ($n % 10 >= 2 && $n % 10 <= 4 && ($n % 100 < 10 or $n % 100 >= 20) ? 1 : 2)); switch($takesklon) { case 0: default: return $form[0]; case 1: return $form[1]; case 2: return $form[2]; } }
так лучше имхо)
Re: Правильные окончания слов
Добавлено: 25 фев 2011, 09:24
bodnar
xShinigami писал(а):Код: Выделить всё
switch($takesklon) { case 0: default: return $form[0]; case 1: return $form[1]; case 2: return $form[2]; }
ох, а лучше ли заменить на
Re: Правильные окончания слов
Добавлено: 16 мар 2011, 18:30
turikhay
я тут набросал код для статистики посещений на php. может, кому пригодиться
Код: Выделить всё
$count = $counters->by_id($id); // Считаем, сколько раз посетили страницу с идом $id$subtr = substr($count,-1); // Вырезаем последнюю цифру из счетчикаif ($count > 20){ if ($substr == 2 or $substr == 3 or $substr == 4) { echo "раза"; } else { echo "раз"; }}else{ if ($count > 4 or $count == 1 and $count < 22) { echo "раз"; } elseif ($count !== 1 or $count == 2 or $count == 3 or $count == 4) { echo "раза"; }}
вроде, работоспособная штука
p.s.
написал еще тогда, когда только начинал постигать php
не ругайсяма
кстати, до сих пор стоит на моем сайте
Re: Правильные окончания слов
Добавлено: 28 ноя 2011, 12:37
Noise Gate
Александр писал(а):Если остаток от 5 до 12, то будет значение 0 - "дней"
Наверное, имеется ввиду,
до 20. По крайей мере, в коде - именно так.
Re: Правильные окончания слов
Добавлено: 28 ноя 2011, 20:52
Александр
Да, От 5 до 20 всегда 0 - "дней".
Re: Правильные окончания слов
Добавлено: 03 мар 2012, 16:37
gpv123
Набросал такой код:
Код: Выделить всё
package { /* Создаем функцию NumberCase: * * number - число; * IpEch - слово в именительном падеже и в единственном числе; * RpEch - слово в родительном падеже и в единственном числе; * RpMch - слово в родительном падеже и во множественном числе; */ public function NumberCase(number:Number, IpEch:String, RpEch:String, RpMch:String) { const END:String = (String(number).replace('.',',')) + ' ';// Тут хранится начало выдаваемой строки if (number < 0) { number = (-1*number);//Если число отрицательное, то делаем его положительным } const NUM100:Number = number % 100; const NUM10:Number = number % 10; const NUM1:Number = number % 1; if (NUM1 > 0) { return END + RpEch; } else if (((NUM100 >= 5) && (NUM100 <= 20)) || (NUM10 >= 5) || (NUM100 == 0)) { return END + RpMch; } else if (NUM10 == 1) { return END + IpEch; } else if ((NUM10 >= 2) && (NUM10 <= 4)) { return END + RpEch; } }}
Проверял на:
Код: Выделить всё
trace(NumberCase( 1, 'день', 'дня', 'дней')); // 1 деньtrace(NumberCase( 15, 'день', 'дня', 'дней')); // 15 днейtrace(NumberCase( 1.1, 'день', 'дня', 'дней')); // 1,1 дняtrace(NumberCase( 4.7, 'день', 'дня', 'дней')); // 4,7 дняtrace(NumberCase( 1589, 'день', 'дня', 'дней')); // 1589 днейtrace(NumberCase( -156.753, 'день', 'дня', 'дней')); // -156,753 дняtrace(NumberCase( 64354165, 'день', 'дня', 'дней')); // 64354165 днейtrace(NumberCase( 64564, 'день', 'дня', 'дней')); // 64564 дняtrace(NumberCase( 1456748, 'день', 'дня', 'дней')); // 1456748 днейtrace(NumberCase(532.4563746, 'день', 'дня', 'дней')); // 532,4563746 дняtrace(NumberCase(-8574.56345, 'день', 'дня', 'дней')); // -8574,56345 дня