Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   перевод цифорок в буквы (http://www.flasher.ru/forum/showthread.php?t=148158)

a7z 22.12.2010 23:09

перевод цифорок в буквы
 
подскажите, может есть готовые классы перевода цифирок в букавки?
вроде этого
1 -> один
233 -> двести тридцать три
и т.д.

Wolsh 23.12.2010 05:01

Код AS3:

package
{
/* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
*  25 AUG 2009    *
*                  *
\* * * * * * * * * */

        public class NumToStringConverter
        {
                private static const UNIT_ARRAY  :Array = ["", " од", " дв", " три", " четыре", " пять", " шесть", " семь", " восемь", " девять", " десять", " одиннадцать", " двенадцать", " тринадцать", " четырнадцать", " пятнадцать", " шестнадцать", " семнадцать", " восемнадцать", " девятнадцать"];
                private static const TEEN_ARRAY  :Array = [" двадцать", " тридцать", " сорок", " пятьдесят", " шестьдесят", " семьдесят", " восемьдесят", " девяносто"];
                private static const HUND_ARRAY  :Array = ["", " сто", " двести", " триста", " четыреста", " пятьсот", " шестьсот", " семьсот", " восемьсот", " девятьсот"];
                private static const ORDER_ARRAY :Array = ["", " тысяч", " миллион", " миллиард"];
 
                public static function convertToRussianText(num:Number):String
                {
                        var resultString:String = "";
                        var resultArray:Array = ["", "", "", ""];
                        var minus:String = "";
 
                        if (num < -999999999999) return "ОШИБКА : число меньше -999999999999";
                        if (num > 999999999999) return "ОШИБКА : число больше 999999999999";
                        if (num < 0)
                        {
                                minus = "минус ";
                                num *= -1
                        }
                        if (num == 0) return "ноль";
                        var numParts:Array = new Array();
                        var i:Number = num;
                        var d:Number = 0;
                        var order:Number = 0;
 
                        while (i >= 1)
                        {
                                d = i;
                                i = Math.floor(i / 1000);
                                numParts[order] = d - i * 1000;
                                order++;
                        }
                        for(var g:Number=0; g<order; g++)
                        {
                                var hundredString:String = "";
                                var decimalString:String = "";
                                var numSuffix:String = "";
                                var strSuffix:String = "";
                                var temp:Number = numParts[g];
                                ////
                                var hundred:Number = Math.floor(temp/100);
                                if (hundred)
                                {
                                        temp -= hundred*100;
                                        hundredString = HUND_ARRAY[hundred];
                                }
                                var decimal:Number = Math.floor(temp/10);
                                if (decimal>1)
                                {
                                        temp -= decimal*10;
                                        decimalString = TEEN_ARRAY[decimal-2];
                                }
                                //// cуффикс числа (для 1 и 2)
                                if (temp == 1 && g != 1) numSuffix = "ин";          // "од^ИН миллион"
                                if (temp == 1 && g == 1) numSuffix = "на";          // "од^НА тысяча"
                                if (temp == 2 && g != 1) numSuffix = "а";            // "дв^А  миллиона"
                                if (temp == 2 && g == 1) numSuffix = "е";            // "дв^Е  тысячи"
                                //// суффикс строки порядка
                                if (g == 1 && temp == 1) strSuffix = "а";            // "1  тысяч^А"
                                if (g == 1 && temp > 1 && temp < 5) strSuffix = "и"; // "2-4 тысяч^И"
                                if (g > 1  && temp > 1 && temp < 5) strSuffix = "а"; // "2-4 миллион^А  - миллиард^А"
                                if (g > 1  && temp > 4)  strSuffix = "ов";          // "5-9 миллион^ОВ - миллиард^ОВ"
                                if (g > 1  && temp == 0) strSuffix = "ов";          // "20-100-900 миллион^ОВ - миллиард^ОВ"
                                resultArray[g]  = hundredString
                                                                + decimalString
                                                                + UNIT_ARRAY[temp]
                                                                + numSuffix
                                                                + (numParts[g] == 0 ? "" : ORDER_ARRAY[g] + strSuffix);
                        }
                        var rcString:String = resultArray[3]
                                                                + resultArray[2]
                                                                + resultArray[1]
                                                                + resultArray[0];
                        resultString = rcString.substr(0,1) == " " ? rcString.substring(1) : rcString;
                        return (minus + resultString);
                }
        }
 
}


samana 23.12.2010 12:57

Ух ты! Круто! Явно не нуб нубом :)

a7z 23.12.2010 14:02

Цитата:

Сообщение от Wolsh (Сообщение 959404)
Код AS3:

package
{
/* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
*  25 AUG 2009    *
*                  *
\* * * * * * * * * */

        public class NumToStringConverter
        {
                private static const UNIT_ARRAY  :Array = ["", " од", " дв", " три", " четыре", " пять", " шесть", " семь", " восемь", " девять", " десять", " одиннадцать", " двенадцать", " тринадцать", " четырнадцать", " пятнадцать", " шестнадцать", " семнадцать", " восемнадцать", " девятнадцать"];
                private static const TEEN_ARRAY  :Array = [" двадцать", " тридцать", " сорок", " пятьдесят", " шестьдесят", " семьдесят", " восемьдесят", " девяносто"];
                private static const HUND_ARRAY  :Array = ["", " сто", " двести", " триста", " четыреста", " пятьсот", " шестьсот", " семьсот", " восемьсот", " девятьсот"];
                private static const ORDER_ARRAY :Array = ["", " тысяч", " миллион", " миллиард"];
 
                public static function convertToRussianText(num:Number):String
                {
                        var resultString:String = "";
                        var resultArray:Array = ["", "", "", ""];
                        var minus:String = "";
 
                        if (num < -999999999999) return "ОШИБКА : число меньше -999999999999";
                        if (num > 999999999999) return "ОШИБКА : число больше 999999999999";
                        if (num < 0)
                        {
                                minus = "минус ";
                                num *= -1
                        }
                        if (num == 0) return "ноль";
                        var numParts:Array = new Array();
                        var i:Number = num;
                        var d:Number = 0;
                        var order:Number = 0;
 
                        while (i >= 1)
                        {
                                d = i;
                                i = Math.floor(i / 1000);
                                numParts[order] = d - i * 1000;
                                order++;
                        }
                        for(var g:Number=0; g<order; g++)
                        {
                                var hundredString:String = "";
                                var decimalString:String = "";
                                var numSuffix:String = "";
                                var strSuffix:String = "";
                                var temp:Number = numParts[g];
                                ////
                                var hundred:Number = Math.floor(temp/100);
                                if (hundred)
                                {
                                        temp -= hundred*100;
                                        hundredString = HUND_ARRAY[hundred];
                                }
                                var decimal:Number = Math.floor(temp/10);
                                if (decimal>1)
                                {
                                        temp -= decimal*10;
                                        decimalString = TEEN_ARRAY[decimal-2];
                                }
                                //// cуффикс числа (для 1 и 2)
                                if (temp == 1 && g != 1) numSuffix = "ин";          // "од^ИН миллион"
                                if (temp == 1 && g == 1) numSuffix = "на";          // "од^НА тысяча"
                                if (temp == 2 && g != 1) numSuffix = "а";            // "дв^А  миллиона"
                                if (temp == 2 && g == 1) numSuffix = "е";            // "дв^Е  тысячи"
                                //// суффикс строки порядка
                                if (g == 1 && temp == 1) strSuffix = "а";            // "1  тысяч^А"
                                if (g == 1 && temp > 1 && temp < 5) strSuffix = "и"; // "2-4 тысяч^И"
                                if (g > 1  && temp > 1 && temp < 5) strSuffix = "а"; // "2-4 миллион^А  - миллиард^А"
                                if (g > 1  && temp > 4)  strSuffix = "ов";          // "5-9 миллион^ОВ - миллиард^ОВ"
                                if (g > 1  && temp == 0) strSuffix = "ов";          // "20-100-900 миллион^ОВ - миллиард^ОВ"
                                resultArray[g]  = hundredString
                                                                + decimalString
                                                                + UNIT_ARRAY[temp]
                                                                + numSuffix
                                                                + (numParts[g] == 0 ? "" : ORDER_ARRAY[g] + strSuffix);
                        }
                        var rcString:String = resultArray[3]
                                                                + resultArray[2]
                                                                + resultArray[1]
                                                                + resultArray[0];
                        resultString = rcString.substr(0,1) == " " ? rcString.substring(1) : rcString;
                        return (minus + resultString);
                }
        }
 
}


красота! респект и уважуха:victory:


Часовой пояс GMT +4, время: 05:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.