Advertisement
daemonio

Gerar números por extenso em Visual Basic 6 by Sidney

Dec 18th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Private Function Extenso(Num As String) As String
  2.   Dim Numeros(5)
  3.   Dim NumExtenso, Trio, TrioExtenso, c, d, u As String
  4.   Dim iClasse As Integer
  5.  
  6.   Numeros(1) = Array("dummy", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove")
  7.   Numeros(2) = Array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove")
  8.   Numeros(3) = Array("dummy", "dummy", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa")
  9.   Numeros(4) = Array("dummy", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos")
  10.   Numeros(5) = Array("dummy", "mil", "milh", "bilh", "trilh", "quatrilh", "quintilh", "sextilh", "septilh", "octilh", "nonilh", "decilh", "undecilh", "duodecilh", "tredecilh", "quatordecilh", "quindecilh", "sexdecilh", "setedecilh", "octodecilh", "novedecilh", "vigesilh")
  11.  
  12.   'Verifica se todos os elementos de Num são iguais a "0"
  13.  For i = 1 To Len(Num)
  14.      iClasse = iClasse + Val(Mid(Num, i, 1))
  15.   Next
  16.   If iClasse = 0 Then
  17.      Extenso = "zero"
  18.      Exit Function
  19.   End If
  20.  
  21.   iClasse = 0
  22.  
  23.   Do While Num  ""
  24.      Trio = Right("00" + Right(Num, 3), 3) 'pega o ultimo trio de numeros, com zeros a esquerda se necessario
  25.     c = Mid(Trio, 1, 1) 'centena
  26.     d = Mid(Trio, 2, 1) 'dezena
  27.     u = Mid(Trio, 3, 1) 'unidade
  28.    
  29.      If Trio = "000" Then
  30.         TrioExtenso = ""
  31.      ElseIf Trio = "100" Then
  32.         TrioExtenso = "cem"
  33.      Else
  34.         'Extenso no casa das centenas
  35.        TrioExtenso = IIf(c = "0", "", Numeros(4)(Val(c)))
  36.        
  37.         'Extenso no casa das Dezenas
  38.        If (d = "1") Then
  39.            If TrioExtenso = "" Then
  40.               TrioExtenso = Numeros(2)(Val(u))
  41.            Else
  42.               TrioExtenso = TrioExtenso + " e " + Numeros(2)(Val(u))
  43.            End If
  44.         Else
  45.            If (d <> "0") Then
  46.               If TrioExtenso = "" Then
  47.                  TrioExtenso = Numeros(3)(Val(d))
  48.               Else
  49.                  TrioExtenso = TrioExtenso + " e " + Numeros(3)(Val(d))
  50.               End If
  51.            End If
  52.            
  53.            'Extenso no casa das unidades
  54.           If (u <> "0") Then
  55.               If TrioExtenso = "" Then
  56.                  TrioExtenso = Numeros(1)(Val(u))
  57.               Else
  58.                  TrioExtenso = TrioExtenso + " e " + Numeros(1)(Val(u))
  59.               End If
  60.            End If
  61.         End If
  62.      End If
  63.      
  64.      'Concatena o extenso do trio no extenso do numedo todo...
  65.     If iClasse = 0 Then
  66.         NumExtenso = TrioExtenso
  67.      ElseIf iClasse = 1 Then
  68.         NumExtenso = IIf(TrioExtenso = "", "", TrioExtenso + " mil " + NumExtenso)
  69.      Else
  70.        If TrioExtenso <> "" Then
  71.           If Val(Trio) = 1 Then
  72.              NumExtenso = TrioExtenso + " " + Numeros(5)(iClasse) + "ão " + NumExtenso
  73.           Else
  74.              NumExtenso = TrioExtenso + " " + Numeros(5)(iClasse) + "ões " + NumExtenso
  75.           End If
  76.        End If
  77.      End If
  78.      
  79.      iClasse = iClasse + 1 'posicao atual no array Numeros(5), para cada trio de numeros processado
  80.    
  81.      'Remove o ultimo trio de numeros de Num. Se o tamanho de Num < 3, seta Num para "", para finalizar o loop.
  82.     If Len(Num) < 3 Then
  83.         Num = ""
  84.      Else
  85.         Num = Mid(Num, 1, Len(Num) - 3)
  86.      End If
  87.   Loop
  88.  
  89.   Extenso = Trim(NumExtenso)
  90. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement