Skip to content

Instantly share code, notes, and snippets.

@adrianoxavier
Created October 30, 2014 18:39
Show Gist options
  • Save adrianoxavier/41e49bdc2c8ac17812a7 to your computer and use it in GitHub Desktop.
Save adrianoxavier/41e49bdc2c8ac17812a7 to your computer and use it in GitHub Desktop.
function extenso(value) {
var singular = ['centavo', 'real', 'mil', 'milhão', 'bilhão', 'trilhão', 'quatrilhão'],
plural = ['centavos', 'reais', 'mil', 'milhões', 'bilhões', 'trilhões', 'quatrilhões'];
var centena = ['', 'cem', 'duzentos', 'trezentos', 'quatrocentos', 'quinhentos', 'seiscentos', 'setecentos', 'oitocentos', 'novecentos'],
dezena = ['', 'dez', 'vinte', 'trinta', 'quarenta', 'cinquenta', 'sessenta', 'setenta', 'oitenta', 'noventa'],
d10 = ['dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezesete', 'dezoito', 'dezenove'],
unidade = ['', 'um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove'];
var valor = Math.round(Number(value) * 100) / 100,
inteiroStr = String(parseInt(valor)).split('').reverse().join(''),
inteiro = inteiroStr.match(/.{1,3}/g).reverse(),
decimal = String(parseInt(Math.round((valor % 1) * 100))),
numero = inteiro.concat(decimal),
cont = numero.length;
for (var i = 0; i < cont; i++) {
for (var ii = numero[i].length; ii < 3; ii++) {
numero[i] = '0' + numero[i];
}
}
var fim = cont - (numero[cont - 1] > 0 ? 1 : 2),
z = 0,
rt = '';
for (var i = 0; i < cont; i++) {
var cmp = Number(numero[i]);
valor = numero[i];
var rc = ((cmp > 100) && (cmp < 200)) ? 'cento' : centena[valor[0]],
rd = (Number(valor[1]) < 2) ? '' : dezena[valor[1]],
ru = (cmp > 0) ? ((valor[1] == 1) ? d10[valor[2]] : unidade[valor[2]]) : '';
var r = rc + ((rc && (rd || ru)) ? ' e ' : '') + rd + ((rd && ru) ? ' e ' : '') + ru;
var t = cont - 1 - i;
r += r ? ' ' + (valor > 1 ? plural[t] : singular[t]) : '';
if (valor == '000') {
z++;
} else if (z > 0) {
z--;
}
if ((t == 1) && (z > 0) && (numero[0] > 0)) {
r += ((z > 1) ? ' de ' : '') + plural[t];
}
if (r) {
rt = rt + (((i > 0) && (i <= fim) && (numero[0] > 0) && (z < 1)) ? ((i < fim) ? ', ' : ' e ') : ' ') + r;
}
}
return (rt ? rt : 'zero');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment