Skip to content

Instantly share code, notes, and snippets.

@oropesa
Last active September 25, 2018 13:42
Show Gist options
  • Save oropesa/625273798461edbc8052b2ac0b73d88b to your computer and use it in GitHub Desktop.
Save oropesa/625273798461edbc8052b2ac0b73d88b to your computer and use it in GitHub Desktop.
Google Spreadsheet Script: Cast digit number to letter number; of money, including cents, in spanish.
var UNIDADES = new Array( "", "un", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciséis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintiuno", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve" );
var DECENAS = new Array( "", "diez", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa", "cien" );
var CENTENAS = new Array( "", "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos" );
function numero2LetrasRecursivo( numero ) {
var resultado = "";
switch( true ) {
case( numero == 0 ):
resultado = "cero";
break;
case( numero >= 1 && numero <= 29 ):
resultado = UNIDADES[ numero ];
break;
case( numero >= 30 && numero <= 100 ):
resultado = numero%10 != 0 ? DECENAS[ Math.floor( numero/10 ) ] + " y " + numero2LetrasRecursivo( numero%10 ) : DECENAS[ Math.floor( numero/10 ) ];
break;
case( numero >= 101 && numero <= 999 ):
resultado = numero%100 != 0 ? CENTENAS[ Math.floor( numero/100 ) ] + " " + numero2LetrasRecursivo( numero%100 ) : CENTENAS[ Math.floor( numero/100 ) ];
break;
case( numero >= 1000 && numero <= 1999 ):
resultado = numero%1000 != 0 ? "mil " + numero2LetrasRecursivo( numero%1000 ) : "mil";
break;
case( numero >= 2000 && numero <= 999999 ):
resultado = numero%1000 != 0 ? numero2LetrasRecursivo( Math.floor( numero/1000 ) ) + " mil " + numero2LetrasRecursivo( numero%1000 ) : numero2LetrasRecursivo( Math.floor( numero/1000 ) ) + " mil";
break;
case( numero >= 1000000 && numero <= 1999999 ):
resultado = numero%1000000 != 0 ? "un millón " + numero2LetrasRecursivo( numero%1000000 ) : "un millón";
break;
case( numero >= 2000000 && numero <= 1999999999 ):
resultado = numero%1000000 != 0 ? numero2LetrasRecursivo( Math.floor( numero/1000000 ) ) + " millones " + numero2LetrasRecursivo( numero%1000000 ) : numero2LetrasRecursivo( Math.floor( numero/1000000 ) ) + " millones";
break;
}
return resultado;
}
function NUMLETRAS( numero ) { return numletras( numero ); }
function numletras( numero ) {
if( ! numero ) { return; }
const MAXIMO = 1999999999.99;
var letras = '';
var numEntero = '';
var numDecimal = '';
var moneda = 'euro';
var monedas = 'euros';
var centimo = 'céntimo';
var centimos = 'céntimos';
numero = numero +'';
numero = numero.indexOf( ',' ) !== -1 ? numero.split( ',' ) : numero.split( '.' );
if( isNaN( parseInt( numero[ 0 ] ) ) ) { return 'ERROR NaN'; }
numEntero = parseInt( numero[ 0 ] );
if( numEntero >= 0 && numEntero <= MAXIMO ) {
letras = numero2LetrasRecursivo( numEntero );
letras = numEntero == 1 ? letras + ' ' + moneda : letras + " " + monedas;
}
if( ! numero[ 1 ] ) { return letras; }
numDecimal = parseInt( numero[ 1 ] );
if( numDecimal > 100 ) {
numDecimal = (numDecimal+'')[0] + (numDecimal+'')[1] + '.' + (numDecimal+'').substr(2);
numDecimal = Math.round( numDecimal*1 );
}
if( numDecimal > 0 ) {
letras = letras + ' con ' + numero2LetrasRecursivo( numDecimal );
letras = numDecimal == 1 ? letras + ' ' + centimo : letras + " " + centimos;
}
return letras;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment