Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/11/2014, 17:04
elleviatan
 
Fecha de Ingreso: mayo-2012
Mensajes: 28
Antigüedad: 11 años, 11 meses
Puntos: 0
Convertir texto a numeros

Hola que tal.

Ante todo agradeceros de antemano las posibles ayudas que reciba.

El caso es que yo no soy programador aunque me gusta trastear en estas cosas y hoy he estado buscando un par de códigos que sirven para convertir un numero a su correspondiente transcripción en palabras. (Tanto en Ingles como en español)

El caso es que se me ha ocurrido la posibilidad de hacer esto mismo a la inversa y creo que se me ha quedado un poco grande la cosa.

¿A alguien le apetece trastear un poco con javascript y ver si es capaz de convertir palabras en números?

Me gustaría hacerlo tanto en ingles como en español, pero cualquier ayuda os estaré muy agradecido.

Os pongo los códigos por si alguien quisiera ayudarme o darme pistas.

En español:

Código:
function Unidades(num) {

    switch (num) {
    case 1:
        return "UN";
    case 2:
        return "DOS";
    case 3:
        return "TRES";
    case 4:
        return "CUATRO";
    case 5:
        return "CINCO";
    case 6:
        return "SEIS";
    case 7:
        return "SIETE";
    case 8:
        return "OCHO";
    case 9:
        return "NUEVE";
    }

    return "";
}

function Decenas(num) {

        decena = Math.floor(num / 10);
        unidad = num - (decena * 10);

        switch (decena) {
        case 1:
            switch (unidad) {
            case 0:
                return "DIEZ";
            case 1:
                return "ONCE";
            case 2:
                return "DOCE";
            case 3:
                return "TRECE";
            case 4:
                return "CATORCE";
            case 5:
                return "QUINCE";
            default:
                return "DIECI" + Unidades(unidad);
            }
        case 2:
            switch (unidad) {
            case 0:
                return "VEINTE";
            default:
                return "VEINTI" + Unidades(unidad);
            }
        case 3:
            return DecenasY("TREINTA", unidad);
        case 4:
            return DecenasY("CUARENTA", unidad);
        case 5:
            return DecenasY("CINCUENTA", unidad);
        case 6:
            return DecenasY("SESENTA", unidad);
        case 7:
            return DecenasY("SETENTA", unidad);
        case 8:
            return DecenasY("OCHENTA", unidad);
        case 9:
            return DecenasY("NOVENTA", unidad);
        case 0:
            return Unidades(unidad);
        }
    } //Unidades()

function DecenasY(strSin, numUnidades) {
        if (numUnidades > 0)
            return strSin + " Y " + Unidades(numUnidades)

        return strSin;
    } //DecenasY()

function Centenas(num) {

        centenas = Math.floor(num / 100);
        decenas = num - (centenas * 100);

        switch (centenas) {
        case 1:
            if (decenas > 0)
                return "CIENTO " + Decenas(decenas);
            return "CIEN";
        case 2:
            return "DOSCIENTOS " + Decenas(decenas);
        case 3:
            return "TRESCIENTOS " + Decenas(decenas);
        case 4:
            return "CUATROCIENTOS " + Decenas(decenas);
        case 5:
            return "QUINIENTOS " + Decenas(decenas);
        case 6:
            return "SEISCIENTOS " + Decenas(decenas);
        case 7:
            return "SETECIENTOS " + Decenas(decenas);
        case 8:
            return "OCHOCIENTOS " + Decenas(decenas);
        case 9:
            return "NOVECIENTOS " + Decenas(decenas);
        }

        return Decenas(decenas);
    } //Centenas()

function Seccion(num, divisor, strSingular, strPlural) {
        cientos = Math.floor(num / divisor)
        resto = num - (cientos * divisor)

        letras = "";

        if (cientos > 0)
            if (cientos > 1)
                letras = Centenas(cientos) + " " + strPlural;
            else
                letras = strSingular;

        if (resto > 0)
            letras += "";

        return letras;
    } //Seccion()

function Miles(num) {
        divisor = 1000;
        cientos = Math.floor(num / divisor)
        resto = num - (cientos * divisor)

        strMiles = Seccion(num, divisor, "UN MIL", "MIL");
        strCentenas = Centenas(resto);

        if (strMiles == "")
            return strCentenas;

        return strMiles + " " + strCentenas;

        //return Seccion(num, divisor, "UN MIL", "MIL") + " " + Centenas(resto);
    } //Miles()

function Millones(num) {
        divisor = 1000000;
        cientos = Math.floor(num / divisor)
        resto = num - (cientos * divisor)

        strMillones = Seccion(num, divisor, "UN MILLON", "MILLONES");
        strMiles = Miles(resto);

        if (strMillones == "")
            return strMiles;

        return strMillones + " " + strMiles;

        //return Seccion(num, divisor, "UN MILLON", "MILLONES") + " " + Miles(resto);
    } //Millones()

function NumeroALetras(num) {
        var data = {
            numero: num,
            enteros: Math.floor(num),
            centavos: (((Math.round(num * 100)) - (Math.floor(num) * 100))),
            letrasCentavos: "",
            letrasMonedaPlural: "",
            letrasMonedaSingular: ""
        };
            //letrasMonedaPlural: "CORDOBAS",
            //letrasMonedaSingular: "CORDOBA"
        //};

        if (data.centavos > 0)
        //data.letrasCentavos = "CON " + data.centavos + "/100";
            data.letrasCentavos = "CON " + NumeroALetras(data.centavos);
            
        if (data.enteros == 1)
            return "UNO " + data.letrasMonedaPlural +  data.letrasCentavos;
        if (data.enteros == 0)
            return "CERO " + data.letrasMonedaPlural + data.letrasCentavos;
        if (data.enteros == 1)
            return Millones(data.enteros) + " " + data.letrasMonedaSingular + " " + data.letrasCentavos;
        else
            return Millones(data.enteros) + " " + data.letrasMonedaPlural + " " + data.letrasCentavos;
    } //NumeroALetras()

En Ingles:

Código:
// Convert numbers to words
// copyright 25th July 2006, by Stephen Chapman http://javascript.about.com
// permission to use this Javascript on your web page is granted
// provided that all of the code (including this copyright notice) is
// used exactly as shown (you can change the numbering system if you wish)
// American Numbering System
var th = ['', 'thousand', 'million', 'billion', 'trillion'];
// uncomment this line for English Number System
// var th = ['','thousand','million', 'milliard','billion'];

var dg = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
var tn = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
var tw = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];

function toWords(s) {
    s = s.toString();
    s = s.replace(/[\, ]/g, '');
    if (s != parseFloat(s)) return 'not a number';
    var x = s.indexOf('.');
    if (x == -1) x = s.length;
    if (x > 15) return 'too big';
    var n = s.split('');
    var str = '';
    var sk = 0;
    for (var i = 0; i < x; i++) {
        if ((x - i) % 3 == 2) {
            if (n[i] == '1') {
                str += tn[Number(n[i + 1])] + ' ';
                i++;
                sk = 1;
            } else if (n[i] != 0) {
                str += tw[n[i] - 2] + ' ';
                sk = 1;
            }
        } else if (n[i] != 0) {
            str += dg[n[i]] + ' ';
            if ((x - i) % 3 == 0) str += 'hundred ';
            sk = 1;
        }
        if ((x - i) % 3 == 1) {
            if (sk) str += th[(x - i - 1) / 3] + ' ';
            sk = 0;
        }
    }
    if (x != s.length) {
        var y = s.length;
        str += 'point ';
        for (var i = x + 1; i < y; i++) str += dg[n[i]] + ' ';
    }
    return str.replace(/\s+/g, ' ');
}
Ambos codigos funcionan de lujo, tanto con numeros enteros como con decimales, pero hacer el mismo codigo al reves.... Supera mis conocimientos

Cualquier ayuda sera bienvenida.

Muchas gracias de antemano

Un saludo