/ Published in: JavaScript
Write a given number in words - Escreve um número por extenso. Write in Brazilian Portuguese, sorry for english or other language guys but it can be adapted.
Write from 1 to 9999
Based on a forum in http://scriptbrasil.com.br/forum/index.php?showtopic=105695
Write from 1 to 9999
Based on a forum in http://scriptbrasil.com.br/forum/index.php?showtopic=105695
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
function NumberInWords(numero) { this.numero = numero; this.extenso = [ { numero: 1, escrita: 'um' }, { numero: 2, escrita: 'dois' }, { numero: 3, escrita: 'tres' }, { numero: 4, escrita: 'quatro' }, { numero: 5, escrita: 'cinco' }, { numero: 6, escrita: 'seis' }, { numero: 7, escrita: 'sete' }, { numero: 8, escrita: 'oito' }, { numero: 9, escrita: 'nove' }, { numero: 10, escrita: 'dez' }, { numero: 11, escrita: 'onze' }, { numero: 12, escrita: 'doze' }, { numero: 13, escrita: 'treze' }, { numero: 14, escrita: 'quatorze' }, { numero: 15, escrita: 'quinze' }, { numero: 16, escrita: 'dezesseis' }, { numero: 17, escrita: 'dezessete' }, { numero: 18, escrita: 'dezoito' }, { numero: 19, escrita: 'dezenove' }, { numero: 20, escrita: 'vinte' }, { numero: 30, escrita: 'trinta' }, { numero: 40, escrita: 'quarenta' }, { numero: 50, escrita: 'cinquenta' }, { numero: 60, escrita: 'sessenta' }, { numero: 70, escrita: 'setenta' }, { numero: 80, escrita: 'oitenta' }, { numero: 90, escrita: 'noventa' }, { numero: 100, escrita: 'cem' }, { numero: 200, escrita: 'duzentos' }, { numero: 300, escrita: 'trezentos' }, { numero: 400, escrita: 'quatrocentos' }, { numero: 500, escrita: 'quinhentos' }, { numero: 600, escrita: 'seiscentos' }, { numero: 700, escrita: 'setecentos' }, { numero: 800, escrita: 'oitocentos' }, { numero: 900, escrita: 'novecentos' } ]; } /** * Transforma conteudo numerico escrito por extenso */ NumberInWords.prototype.write = function() { var valores = []; var a = this.verify(this.numero.toString()); var unid = a.length - 1; var marc11 = 0; for(var expo = 0; unid >= 0; unid--, expo++) { if(a[a.length - 2] == 1 && marc11 === 0) { if(a[a.length - 1] == 1) valores[unid - 1] = this.extenso[10].escrita; else valores[unid - 1] = this.extenso[a[unid - 1] + a[unid] - 1].escrita; valores[unid] = ""; marc11 = 1; unid = unid - 1; expo = expo + 1; } else{ for(l = 0; l <= 35; l++) { if(this.extenso[l].numero == a[unid] * this.exponent(expo)) valores[unid] = this.extenso[l].escrita; } } } return this.format(valores); }; NumberInWords.prototype.exponent = function(v) { var mult = 1; if(v == 3) return mult; for(v; v > 0; v--) mult = mult * 10; return mult; }; NumberInWords.prototype.format = function(v) { var porExtenso; var e = " e "; switch(v.length){ case 1: porExtenso = v[0]; break; case 2: porExtenso = v[0] + e + v[1]; break; case 3: porExtenso = v[0] + e + v[1] + e + v[2]; break; case 4: porExtenso = v[0] + " mil " + v[1] + e + v[2] + e + v[3]; break; default: porExtenso = "Erro"; } if(porExtenso[porExtenso.length - 1] == " ") porExtenso = porExtenso.substr(0, porExtenso.length - 2); return porExtenso; }; NumberInWords.prototype.verify = function(valor) { var vrf = 0; for(i = 0; i < valor.length; i++) { if(valor.charAt(i) == ",") vrf = 1; } if(vrf == 1){ valor = valor.split(","); return valor[0]; } return valor; };