Valor Monetário em Extenso

Uma postagem rápida aqui só para constar o que fiz hoje, eu precisava de uma função JavaScript que transformasse valores monetários para extenso, porém as únicas que achei não eram em JavaScript, PHP, ASP, etc.. Então resolvi transformar uma que estava em PHP pra JS, segue o código abaixo, fiquem a vontade..


<html>
<script>

function number_format(a, b, c, d) {
a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b);
e = a + ”;
f = e.split(‘.’);
if (!f[0]) {
f[0] = ’0′;
}
if (!f[1]) {
f[1] = ”;
}
if (f[1].length < b) {
g = f[1];
for (i=f[1].length + 1; i <= b; i++) {
g += ’0′;
}
f[1] = g;
}
if(d != ” && f[0].length > 3) {
h = f[0];
f[0] = ”;
for(j = 3; j < h.length; j+=3) {
i = h.slice(h.length – j, h.length – j + 3);
f[0] = d + i + f[0] + ”;
}
j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
f[0] = j + f[0];
}
c = (b <= 0) ? ” : c;
return f[0] + c + f[1];
}

function ValorPorExtenso(valor) {

if (!valor) return ‘Zero’;

var singular = ["centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão"];
var plural = ["centavos", "reais", "mil", "milhões", "bilhões", "trilhões", "quatrilhões"];

var c = ["", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos"];
var d = ["", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"];
var d10 = ["dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezesete", "dezoito", "dezenove"];
var u = ["", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove"];

var z = 0;

valor = valor.toString();
valor = number_format(valor, 2, ‘.’, ‘.’);

var inteiro = valor.split(/\./);

for (var i = 0; i < inteiro.length; i++) {
inteiro[i] = inteiro[i].toString();
for (var ii = inteiro[i].length; ii < 3; ii++) {
inteiro[i] = ’0′ + inteiro[i];
}
}

var fim = inteiro.length – ( inteiro[inteiro.length-1] > 0 ? 1 : 2 );

var rc, rd, ru;
var r, t;
var rt = ”;
var valor_split;
for (var i = 0; i < inteiro.length; i++) {

valor = inteiro[i];
valor_split = valor.match(/./g);

rc = ((valor > 100) && (valor < 200)) ? “cento” : c[valor_split[0]];
rd = (valor_split[1] < 2) ? “” : d[valor_split[1]];
ru = (valor > 0) ? ((valor_split[1] == 1) ? d10[valor_split[2]] : u[valor_split[2]]) : “”;

r = rc + ((rc && (rd || ru)) ? ” e ” : “”) + rd + ((rd && ru) ? ” e ” : “”) + ru;
t = inteiro.length – 1 – i;

r = r + (r ? ” ” + (valor > 1 ? plural[t] : singular[t]) : “”);
if (valor == “000″) z++;
else if (z > 0) z–;

if ((t==1) && (z>0) && (inteiro[0] > 0)) {
r = r + ((z>1) ? ” de ” : “”) + plural[t];
}
if (r) {
rt = rt + (((i > 0) && (i <= fim) && (inteiro[0] > 0) && (z < 1)) ? ( (i < fim) ? “, ” : ” e “) : ” “) + r;
}

}

return (rt ? rt : “zero”);

}

alert(ValorPorExtenso(8916165));

</script>
</html>

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.