Number in Words (Número por extenso)


/ Published in: JavaScript
Save to your folder(s)

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


Copy this code and paste it in your HTML
  1. function NumberInWords(numero) {
  2. this.numero = numero;
  3. this.extenso = [
  4. { numero: 1, escrita: 'um' },
  5. { numero: 2, escrita: 'dois' },
  6. { numero: 3, escrita: 'tres' },
  7. { numero: 4, escrita: 'quatro' },
  8. { numero: 5, escrita: 'cinco' },
  9. { numero: 6, escrita: 'seis' },
  10. { numero: 7, escrita: 'sete' },
  11. { numero: 8, escrita: 'oito' },
  12. { numero: 9, escrita: 'nove' },
  13. { numero: 10, escrita: 'dez' },
  14. { numero: 11, escrita: 'onze' },
  15. { numero: 12, escrita: 'doze' },
  16. { numero: 13, escrita: 'treze' },
  17. { numero: 14, escrita: 'quatorze' },
  18. { numero: 15, escrita: 'quinze' },
  19. { numero: 16, escrita: 'dezesseis' },
  20. { numero: 17, escrita: 'dezessete' },
  21. { numero: 18, escrita: 'dezoito' },
  22. { numero: 19, escrita: 'dezenove' },
  23. { numero: 20, escrita: 'vinte' },
  24. { numero: 30, escrita: 'trinta' },
  25. { numero: 40, escrita: 'quarenta' },
  26. { numero: 50, escrita: 'cinquenta' },
  27. { numero: 60, escrita: 'sessenta' },
  28. { numero: 70, escrita: 'setenta' },
  29. { numero: 80, escrita: 'oitenta' },
  30. { numero: 90, escrita: 'noventa' },
  31. { numero: 100, escrita: 'cem' },
  32. { numero: 200, escrita: 'duzentos' },
  33. { numero: 300, escrita: 'trezentos' },
  34. { numero: 400, escrita: 'quatrocentos' },
  35. { numero: 500, escrita: 'quinhentos' },
  36. { numero: 600, escrita: 'seiscentos' },
  37. { numero: 700, escrita: 'setecentos' },
  38. { numero: 800, escrita: 'oitocentos' },
  39. { numero: 900, escrita: 'novecentos' }
  40. ];
  41. }
  42.  
  43. /**
  44.  * Transforma conteudo numerico escrito por extenso
  45.  */
  46. NumberInWords.prototype.write = function() {
  47. var valores = [];
  48. var a = this.verify(this.numero.toString());
  49. var unid = a.length - 1;
  50. var marc11 = 0;
  51.  
  52. for(var expo = 0; unid >= 0; unid--, expo++) {
  53. if(a[a.length - 2] == 1 && marc11 === 0) {
  54. if(a[a.length - 1] == 1)
  55. valores[unid - 1] = this.extenso[10].escrita;
  56. else
  57. valores[unid - 1] = this.extenso[a[unid - 1] + a[unid] - 1].escrita;
  58.  
  59. valores[unid] = "";
  60. marc11 = 1;
  61. unid = unid - 1;
  62. expo = expo + 1;
  63. } else{
  64. for(l = 0; l <= 35; l++) {
  65. if(this.extenso[l].numero == a[unid] * this.exponent(expo))
  66. valores[unid] = this.extenso[l].escrita;
  67. }
  68. }
  69. }
  70.  
  71. return this.format(valores);
  72. };
  73.  
  74. NumberInWords.prototype.exponent = function(v) {
  75. var mult = 1;
  76.  
  77. if(v == 3)
  78. return mult;
  79. for(v; v > 0; v--)
  80. mult = mult * 10;
  81.  
  82. return mult;
  83. };
  84.  
  85. NumberInWords.prototype.format = function(v) {
  86. var porExtenso;
  87. var e = " e ";
  88.  
  89. switch(v.length){
  90. case 1:
  91. porExtenso = v[0];
  92. break;
  93. case 2:
  94. porExtenso = v[0] + e + v[1];
  95. break;
  96. case 3:
  97. porExtenso = v[0] + e + v[1] + e + v[2];
  98. break;
  99. case 4:
  100. porExtenso = v[0] + " mil " + v[1] + e + v[2] + e + v[3];
  101. break;
  102. default:
  103. porExtenso = "Erro";
  104. }
  105.  
  106. if(porExtenso[porExtenso.length - 1] == " ")
  107. porExtenso = porExtenso.substr(0, porExtenso.length - 2);
  108.  
  109. return porExtenso;
  110. };
  111.  
  112. NumberInWords.prototype.verify = function(valor) {
  113. var vrf = 0;
  114.  
  115. for(i = 0; i < valor.length; i++) {
  116. if(valor.charAt(i) == ",")
  117. vrf = 1;
  118. }
  119.  
  120. if(vrf == 1){
  121. valor = valor.split(",");
  122. return valor[0];
  123. }
  124.  
  125. return valor;
  126. };

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.