Return to Snippet

Revision: 58183
at June 30, 2012 05:29 by glauberportella


Updated Code
function NumberInWords(numero) {
    this.numero = numero;
    this.extenso = [
        { numero: 1, escrita: 'um' },
        { numero: 2, escrita: 'dois' },
        { numero: 3, escrita: 'tres' },
        { numero: 4, escrita: 'quatro' },
        { numero: 5, escrita: 'cinco' },
        { numero: 6, escrita: 'seis' },
        { numero: 7, escrita: 'sete' },
        { numero: 8, escrita: 'oito' },
        { numero: 9, escrita: 'nove' },
        { numero: 10, escrita: 'dez' },
        { numero: 11, escrita: 'onze' },
        { numero: 12, escrita: 'doze' },
        { numero: 13, escrita: 'treze' },
        { numero: 14, escrita: 'quatorze' },
        { numero: 15, escrita: 'quinze' },
        { numero: 16, escrita: 'dezesseis' },
        { numero: 17, escrita: 'dezessete' },
        { numero: 18, escrita: 'dezoito' },
        { numero: 19, escrita: 'dezenove' },
        { numero: 20, escrita: 'vinte' },
        { numero: 30, escrita: 'trinta' },
        { numero: 40, escrita: 'quarenta' },
        { numero: 50, escrita: 'cinquenta' },
        { numero: 60, escrita: 'sessenta' },
        { numero: 70, escrita: 'setenta' },
        { numero: 80, escrita: 'oitenta' },
        { numero: 90, escrita: 'noventa' },
        { numero: 100, escrita: 'cem' },
        { numero: 200, escrita: 'duzentos' },
        { numero: 300, escrita: 'trezentos' },
        { numero: 400, escrita: 'quatrocentos' },
        { numero: 500, escrita: 'quinhentos' },
        { numero: 600, escrita: 'seiscentos' },
        { numero: 700, escrita: 'setecentos' },
        { numero: 800, escrita: 'oitocentos' },
        { numero: 900, escrita: 'novecentos' }
    ];
}

/**
 * Transforma conteudo numerico escrito por extenso
 */
NumberInWords.prototype.write = function() {
    var valores = [];
    var a = this.verify(this.numero.toString());
    var unid = a.length - 1;
    var marc11 = 0;

    for(var expo = 0; unid >= 0; unid--, expo++) {
         if(a[a.length - 2] == 1 && marc11 === 0) {
             if(a[a.length - 1] == 1)
                valores[unid - 1] = this.extenso[10].escrita;
            else
                valores[unid - 1] = this.extenso[a[unid - 1] + a[unid] - 1].escrita;

            valores[unid] = "";
            marc11 = 1;
            unid = unid - 1;
            expo = expo + 1;
        } else{
            for(l = 0; l <= 35; l++) {
                if(this.extenso[l].numero == a[unid] * this.exponent(expo))
                    valores[unid] = this.extenso[l].escrita;
            }
        }
    }

    return this.format(valores);
};

NumberInWords.prototype.exponent = function(v) {
    var mult = 1;

    if(v == 3)
        return mult;
    for(v; v > 0; v--)
        mult = mult * 10;

    return mult;
};

NumberInWords.prototype.format = function(v) {
    var porExtenso;
    var e = " e ";

    switch(v.length){
        case 1:
            porExtenso = v[0];
            break;
        case 2:
            porExtenso = v[0] + e + v[1];
            break;
        case 3:
            porExtenso = v[0] + e + v[1] + e + v[2];
            break;
        case 4:
            porExtenso = v[0] + " mil " + v[1] + e + v[2] + e + v[3];
            break;
        default:
            porExtenso = "Erro";
    }

    if(porExtenso[porExtenso.length - 1] == " ")
        porExtenso = porExtenso.substr(0, porExtenso.length - 2);

    return porExtenso;
};

NumberInWords.prototype.verify = function(valor) {
    var vrf = 0;

    for(i = 0; i < valor.length; i++) {
        if(valor.charAt(i) == ",")
            vrf = 1;
    }

    if(vrf == 1){
        valor = valor.split(",");
        return valor[0];
    }

    return valor;
};

Revision: 58182
at June 29, 2012 23:36 by glauberportella


Initial Code
function NumberInWords(numero) {
    this.numero = numero;
    this.extenso = [
        { numero: 1, escrita: 'um' },
        { numero: 2, escrita: 'dois' },
        { numero: 3, escrita: 'tres' },
        { numero: 4, escrita: 'quatro' },
        { numero: 5, escrita: 'cinco' },
        { numero: 6, escrita: 'seis' },
        { numero: 7, escrita: 'sete' },
        { numero: 8, escrita: 'oito' },
        { numero: 9, escrita: 'nove' },
        { numero: 10, escrita: 'dez' },
        { numero: 11, escrita: 'onze' },
        { numero: 12, escrita: 'doze' },
        { numero: 13, escrita: 'treze' },
        { numero: 14, escrita: 'quatorze' },
        { numero: 15, escrita: 'quinze' },
        { numero: 16, escrita: 'dezesseis' },
        { numero: 17, escrita: 'dezesete' },
        { numero: 18, escrita: 'dezoito' },
        { numero: 19, escrita: 'dezenove' },
        { numero: 20, escrita: 'vinte' },
        { numero: 30, escrita: 'trinta' },
        { numero: 40, escrita: 'quarenta' },
        { numero: 50, escrita: 'cinquenta' },
        { numero: 60, escrita: 'sessenta' },
        { numero: 70, escrita: 'setenta' },
        { numero: 80, escrita: 'oitenta' },
        { numero: 90, escrita: 'noventa' },
        { numero: 100, escrita: 'cem' },
        { numero: 200, escrita: 'duzentos' },
        { numero: 300, escrita: 'trezentos' },
        { numero: 400, escrita: 'quatrocentos' },
        { numero: 500, escrita: 'quinhentos' },
        { numero: 600, escrita: 'seiscentos' },
        { numero: 700, escrita: 'setecentos' },
        { numero: 800, escrita: 'oitocentos' },
        { numero: 900, escrita: 'novecentos' }
    ];
}

/**
 * Transforma conteudo numerico escrito por extenso
 */
NumberInWords.prototype.write = function() {
    var valores = [];
    var a = this.verify(this.numero.toString());
    var unid = a.length - 1;
    var marc11 = 0;

    for(var expo = 0; unid >= 0; unid--, expo++) {
         if(a[a.length - 2] == 1 && marc11 === 0) {
             if(a[a.length - 1] == 1)
                valores[unid - 1] = this.extenso[10].escrita;
            else
                valores[unid - 1] = this.extenso[a[unid - 1] + a[unid] - 1].escrita;

            valores[unid] = "";
            marc11 = 1;
            unid = unid - 1;
            expo = expo + 1;
        } else{
            for(l = 0; l <= 35; l++) {
                if(this.extenso[l].numero == a[unid] * this.exponent(expo))
                    valores[unid] = this.extenso[l].escrita;
            }
        }
    }

    return this.format(valores);
};

NumberInWords.prototype.exponent = function(v) {
    var mult = 1;

    if(v == 3)
        return mult;
    for(v; v > 0; v--)
        mult = mult * 10;

    return mult;
};

NumberInWords.prototype.format = function(v) {
    var porExtenso;
    var e = " e ";

    switch(v.length){
        case 1:
            porExtenso = v[0];
            break;
        case 2:
            porExtenso = v[0] + e + v[1];
            break;
        case 3:
            porExtenso = v[0] + e + v[1] + e + v[2];
            break;
        case 4:
            porExtenso = v[0] + " mil " + v[1] + e + v[2] + e + v[3];
            break;
        default:
            porExtenso = "Erro";
    }

    if(porExtenso[porExtenso.length - 1] == " ")
        porExtenso = porExtenso.substr(0, porExtenso.length - 2);

    return porExtenso;
};

NumberInWords.prototype.verify = function(valor) {
    var vrf = 0;

    for(i = 0; i < valor.length; i++) {
        if(valor.charAt(i) == ",")
            vrf = 1;
    }

    if(vrf == 1){
        valor = valor.split(",");
        return valor[0];
    }

    return valor;
};

Initial URL


Initial Description
Write a given number in words - Escreve um número por extenso. Write in Brazilian Portuguese, sorry for english or other language guys but it can be adapted.

Write from 1 to 9999 

Based on a forum in http://scriptbrasil.com.br/forum/index.php?showtopic=105695

Initial Title
Number in Words (Número por extenso)

Initial Tags
number

Initial Language
JavaScript