JavaScript: pasar números a letras (usando matrices)

Mismo caso que el anterior, pasar números a letras pero en este caso usando 3 matrices para ver su uso.

var gUnidad = ["", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve"];
var gDecena = [
    10, "diez", 11, "once", 12, "doce", 13, "trece",
    14, "catorce", 15, "quince", 20, "veinte",
    30, "treinta", 40, "cuarenta", 50, "cincuenta",
    60, "sesenta", 70, "setenta", 80, "ochenta",
    90, "noventa"
];
var gCentena = [
    "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos",
    "novecientos"
];


function formatearALetra() {
    var num = document.getElementById("numero").value;
    console.log(formatNumeroToString(num));
};

function formatNumeroToString(numero) {
    if (isNaN(numero) || numero < 1 || numero > 99999)
        throw "número no válido";
    return decenamillar(numero);
}

function decenamillar(numero) {
    if (numero < 10)
        return unidad(numero);
    if (numero < 99)
        return decena(numero);
    if (numero < 999)
        return centena(numero);
    if (numero < 9999)         
        return millar(numero);
    if (numero > 99999)
        throw "decena millar no válido";

    var mil = numero.toString().substring(0, 2);
    return decena(mil) + " mil " + centena(numero.toString().substring(2));
}

function millar(numero) {
    if (numero < 10)
        return unidad(numero);
    if (numero < 99)
        return decena(numero);
    if (numero < 999)         
       return centena(numero);     
    if (numero > 9999)
        throw "decena no válido";

    var mil = numero.toString().substring(0, 1);


    return mil !== "1"
        ? unidad(mil) + " mil " + centena(numero.toString().substring(1))
        : "mil " + centena(numero.toString().substring(1));
}

function centena(numero) {

    if (numero < 10)
        return unidad(numero);
    if (numero < 99)         
        return decena(numero);     
    if (numero > 999)
        throw "centena no válido";
    if (numero === "100")
        return "cien";

    var cen = numero.toString().substring(0, 1);

    return gCentena[cen - 1] + " " + decena(numero.toString().substring(1));
}

function decena(numero) {
    numero = parseInt(numero, 10);
    if (numero < 10)         
        return unidad(numero);     
    if (numero > 99)
        throw "decena no válido";
    if (gDecena.indexOf(numero) >= 0)
        return gDecena[gDecena.indexOf(numero) + 1];
   
    var uni = numero.toString().substring(numero.toString().length - 1);
    return decenaRara(numero) + unidad(uni);
   
};

function decenaRara(num) {
    var primero = num.toString().substring(0, 1);
    switch (primero) {
    case "1":
        return "dieci";
    case "2":
        return "veinti";
    default:
        return decena(primero + "0") + " y ";
    }
}

function unidad(numero) {
    numero = parseInt(numero, 10);
    if (numero < 0 || numero > 9)
        throw "unidad no válido";

    return gUnidad[numero];
}
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s