none
Valor por Extenso em Espanhol

    問題

  • Boa tarde galera,

    Preciso escrever por valores por extenso em ESPANHOL por exemplo:

    $1.543,24

    PORTUGUES: MIL, Quinhetos e quarenta e treis e vinte quatro centavos

    PARA ESPANHOL: MIL, Quinhetos y cuarenta y treis y veinticuatro centavos

     Alguem tem alguma função que faz isso ou uma idéia em VB.NET ??

     Obrigada,

    Jaqueline

    2010年4月20日 下午 07:46

解答

  • Jaqueline, esta função retorna por extenso, altere as strings pelo valor em espanhol.

    Public Function PorExtenso(ByVal Numero As String, _
     ByVal MoedaSingular As String, _
     ByVal MoedaPlural As String, _
     ByVal CultureInfo As System.Globalization.CultureInfo) As String
    
     Dim stringValor As String
     Dim valor As Decimal
     Dim Negativo As Boolean
     Dim buffer As String
     Dim parcial As Integer
     Dim posicao As Integer
     Dim numExtenso As String = String.Empty
    
     Dim Unidades() As String = {String.Empty, "Um", "Dois", _
            "Três", "Quatro", "Cinco", _
            "Seis", "Sete", "Oito", "Nove", _
            "Dez", "Onze", "Doze", "Treze", _
            "Quatorze", "Quinze", "Dezesseis", _
            "Dezessete", "Dezoito", "Dezenove"}
    
     Dim Dezenas() As String = {String.Empty, String.Empty, _
            "Vinte", "Trinta", "Quarenta", _
            "Cinqüenta", "Sessenta", "Setenta", _
            "Oitenta", "Noventa"}
    
     Dim Centenas() As String = {String.Empty, "Cento", _
            "Duzentos", "Trezentos", _
            "Quatrocentos", "Quinhentos", _
            "Seiscentos", "Setecentos", _
            "Oitocentos", "Novecentos"}
    
     Dim PotenciasSingular() As String = {String.Empty, " Mil", _
               " Milhão", " Bilhão", _
               " Trilhão", " Quatrilhão"}
    
     Dim PotenciasPlural() As String = {String.Empty, " Mil", _
              " Milhões", " Bilhões", _
              " Trilhões", " Quatrilhões"}
    
     Dim ret As Boolean = Decimal.TryParse(Numero, System.Globalization.NumberStyles.Currency, CultureInfo, valor)
     Dim semDe As Boolean = False
     If ret Then
      Negativo = (valor < 0)
      If Negativo Then
       valor = Math.Abs(valor)
      End If
      stringValor = valor.ToString(New String("0"c, 18) & ".000").Substring(0, 18)
      For posicao = 1 To 18 Step 3
       parcial = CType(stringValor.Substring(posicao - 1, 3), Integer)
       If parcial > 0 Then
        If parcial = 1 Then
         buffer = "Um" & PotenciasSingular((18 - posicao) \ 3)
        ElseIf parcial = 100 Then
         buffer = "Cem" & PotenciasPlural((18 - posicao) \ 3) 'Convert.ToString( _
         'IIf(posicao > 16, PotenciasSingular((18 - posicao) \ 3), PotenciasPlural((18 - posicao) \ 3)))
        Else
         buffer = Centenas(parcial \ 100)
         parcial = parcial Mod 100
         If parcial <> 0 AndAlso buffer <> String.Empty Then
          buffer = buffer & " e "
         End If
         If parcial < 20 Then
          buffer = buffer & Unidades(parcial)
         Else
          buffer = buffer & Dezenas(parcial \ 10)
          parcial = parcial Mod 10
          If parcial <> 0 AndAlso buffer <> String.Empty Then
           buffer = buffer & " e "
          End If
          buffer = buffer & Unidades(parcial)
         End If
         buffer = buffer & PotenciasPlural((18 - posicao) \ 3)
        End If
        If buffer <> String.Empty Then
         If numExtenso <> String.Empty Then
          parcial = CType(stringValor.Substring(posicao - 1, 3), Integer)
          If posicao = 16 AndAlso (parcial < 100 OrElse (parcial Mod 100) = 0) Then
           numExtenso = numExtenso & " e "
          Else
           numExtenso = numExtenso & ", "
          End If
          semDe = True
         End If
         numExtenso = numExtenso & buffer
        End If
       Else
        If Not semDe AndAlso posicao = 16 AndAlso (valor >= 1000000) Then
         numExtenso = numExtenso & " de"
        End If
       End If
      Next
      If numExtenso <> String.Empty Then
       If Negativo Then
        numExtenso = "Menos " & numExtenso
       End If
       If Math.Truncate(valor) = 1 Then
        numExtenso = numExtenso & " " & MoedaSingular
       Else
        numExtenso = numExtenso & " " & MoedaPlural
       End If
      End If
      parcial = CType(((valor - Math.Truncate(valor)) * 100 + 0.1), Integer)
      If parcial > 0 Then
       buffer = PorExtenso(Convert.ToString(parcial), "Centavo", "Centavos", CultureInfo)
       If numExtenso <> String.Empty Then
        numExtenso = numExtenso & " e "
       End If
       numExtenso = numExtenso & buffer
      End If
     End If
     Return numExtenso
    End Function
    
    
    
    
    Para usar:
    
    txtDestino.Text = PorExtenso(txtOrigem.Text, "Real", "Reais", Nothing)
    

    Referência: http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/35434a86-2cce-4319-b001-4bbd273f65f0


    []s.

    Alan. Twitter
    2010年4月20日 下午 07:51