Last active
September 25, 2018 13:42
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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