Страница 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];        }
ох, а лучше ли заменить на

Код: Выделить всё

return $form[$takesklon]

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

Добавлено: 16 мар 2011, 18:30
turikhay
я тут набросал код для статистики посещений на php. может, кому пригодиться :D

Код: Выделить всё

$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 :) не ругайсяма :D кстати, до сих пор стоит на моем сайте :D

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 дня