Javascript.RU

Перевод числа в текст

Искал в гугле...есть различные способы на многих языках, но слишком громоздко. В итоге написал вот такой велосипед....всего 70 строк...может кому пригодится

function digtotext(dig){
    this.words = {
        m3:[['тысяча','тысячи','тысяч'], ['миллион','миллиона','миллионов'], ['миллиард', 'миллиарда', 'миллиардов']],
        m2:['сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот'],
        m1:['дестять','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемдесят','девяносто'],
        m0:['один','два','три','четыре','пять','шесть','семь','восемь','девять','десять'],
        f0:['одина','две'],
        l0:['дестять', 'одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать']
    };
    this.dim = function(dig, power, words){
        var result = '';
        var pow = Math.floor(dig/Math.pow(10, power)) % Math.pow(10,3);
        if(!pow) return result;
        var n2 =  Math.floor(pow/100);
        var n1 =  Math.floor(pow%Math.pow(10,2)/10);
        var n0 =  Math.floor(pow%10);
        var s1 = (n1 > 0)?' ':'';
        var s0 = (n0 > 0)?' ':'';
        var get_n = function(){
            switch(power){
                case 0:
                case 6: 
                case 9: 
                    result +=s0+words.m0[n0-1];
                break;
                case 3:
                    if(n0 < 3){
                        result +=s0+words.f0[n0-1];
                    }else{
                        result +=s0+words.m0[n0-1];
                    }
                break;
            }
        };
        if(n2 > 0){
            result += words.m2[n2-1];
        }
        if(n1 > 0){
            if(n1 > 1){
                result +=s1+words.m1[n1-1];
                if(n0 > 0) get_n();
            }
            else{
                result +=s1+words.l0[n0]; 
            }            
        }else{
            if(n0 > 0) get_n();
        }        
        if(power){            
            var d = (power-3)/3;
            if((d == 0) && (n0+n1*10 >= 11 && n0+n1*10 <= 14)){
                result +=' '+words.m3[0][2];
            }else if(n0 == 1){
                result +=' '+words.m3[d][0];
            }
            else if((n0 >= 2) && (n0 <= 4)){
                result +=' '+words.m3[d][1];
            }
            else if((n0 == 0) || (n0 >= 5 && n0 <= 9)){
                result +=' '+words.m3[d][2];
            }
        }
        return result;
    }       
    this.result = '';
    for(var i = 9 ; i > -1; i-=3){
        this.result += this.dim(dig, i, this.words) + ' ';
    }
    return this.result.replace(/[\s]{2,}/ig,' ').trim();
}
+2

Автор: exru, дата: 26 декабря, 2014 - 10:23
#permalink

Обнаружил небольшой баг пока еще не поправил


 
Поиск по сайту
Другие записи этого автора
Больше записей нет. Прокомментируйте эту запись - может быть, тогда он что-нибудь еще хорошее напишет ;)
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние темы на форуме
Forum