Sign in to follow this  
Followers 0
coelhorb

Escreve Número por Extenso (Portuguese)

1 post in this topic

A example script to translate numbers to word (in portuguese)

portugues:

este script escreve número por extenso

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.4.0
 Author:         Ricardo Bernardes Coelho

 Script Function:
    Escreve um dado valor por extenso

#ce ----------------------------------------------------------------------------

;Centena, Dezena, Unidade (CDU)
Const $unidade_por_extenso[10]  = ["","UM", "DOIS", "TRES", "QUATRO", "CINCO", "SEIS", "SETE", "OITO", "NOVE"]
Const $dezena_por_extenso[10]   = ["","DEZ", "VINTE", "TRINTA", "QUARENTA", "CINQUENTA", "SESSENTA", "SETENTA", "OITENTA", "NOVENTA"]
Const $centena_por_extenso[10]  = ["","CEM", "DUZENTOS", "TREZENTOS", "QUATROCENTOS", "QUINHENTOS", "SEISCENTOS", "SETECENTOS", "OITOCENTOS", "NOVECENTOS"]
Const $especial_por_extenso[11] = ["","ONZE", "DOZE", "TREZE", "CATORZE", "QUINZE", "DEZESEIS", "DEZESSETE", "DEZOITO", "DEZENOVE", "CENTO"]
Const $milhar[4] = ["", "MIL", "MILHÃO", "BILHÃO"]
Const $milhares[4] = ["", "MIL", "MILHÕES", "BILHÕES"]

Func ContaAtemMil($Valor)
        Dim $str_valor
        $str_valor = StringFormat("%03d", $Valor)
        Dim $centena, $dezena, $unidade
        $centena = StringMid($str_valor,1,1)
        $dezena = StringMid($str_valor,2,1)
        $unidade = StringMid($str_valor,3,1)
        $str_valor = ""
        If $centena <> "0" Then
            If $centena == "1" Then
                If $dezena+$unidade <> 0 Then
                    $str_valor &= $especial_por_extenso[10]; & " E" ;cento e
                Else
                    $str_valor = $centena_por_extenso[1]
                EndIf
            Else
                $str_valor &= $centena_por_extenso[$centena]
            EndIf
        EndIf
        If $dezena <> "0" Then
            If StringLen($str_valor) > 0 Then $str_valor &= " E "
            If $dezena == "1" Then
                If $unidade == "0" Then
                    $str_valor &= $dezena_por_extenso[$dezena]
                Else
                    $str_valor &= $especial_por_extenso[$unidade]
                EndIf
            Else
                $str_valor &= $dezena_por_extenso[$dezena]
            EndIf
        EndIf
        If $unidade <> "0" And $dezena<> "1" Then
            If StringLen($str_valor) > 0 Then $str_valor &= " E "
            $str_valor &= $unidade_por_extenso[$unidade]
        EndIf
        Return $str_valor
EndFunc


Func ValorPorExtenso($Valor)
    Dim $tamanho_valor = Ceiling(StringLen($Valor)/3)
    Dim $format_valor = "%0" & $tamanho_valor*3 & "d"
    Dim $str_valor = StringFormat($format_valor, $Valor)
    Dim $vector_valores[$tamanho_valor]
    For $i=0 To $tamanho_valor-1
        $vector_valores[$tamanho_valor-1-$i] = StringMid($str_valor,$i*3+1,3)
    Next
    Dim $valor_por_extenso = ""
    For $i=$tamanho_valor-1 To 0 Step -1
        $str_valor = ContaAtemMil($vector_valores[$i])
        If $str_valor <> "" Then
            If $str_valor==$unidade_por_extenso[1] And $i == 1 Then  ; se mil
                $str_valor = $milhar[1]
            Else
                If $vector_valores[$i] > 1 Then
                    $str_valor &= " " & $milhares[$i]
                Else
                    $str_valor &= " " & $milhar[$i]
                EndIf
            EndIf
            If StringLen($valor_por_extenso)>0 Then $valor_por_extenso &= " E "
            $valor_por_extenso &= $str_valor
        EndIf
    Next
    Return $valor_por_extenso
EndFunc

Dim $a = 158158
MsgBox(0, $a,ValorPorExtenso($a))
1 person likes this

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0