Набросал такой код:
Код: Выделить всё
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 дня