Entre para seguir isso  
Seguidores 0

Valor Por Extenso

5 posts neste tópico

Postado

Ola galera gostaria de saber se alguém tem uma função que escreva um numero por extenso.

de preferencia js , mas pode ser em outra linguagem! mas também que tebnha todas as funcões definidas, pois já peguie algumas mas que tinham funcoes que eram nativas da linguagem, que eu não entendo logo no consigo passar para js!

Eu já fiz uma mas ela tem problemas co 11 12 .... 19.

dez de já grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

coloca o que você já fez ai,

quem sabe, mechendo aqui e ali a gente poe a funcionar.

at+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

ai vai a bucha! o programa e bem simples pos não faco questao de ponto nem virgula nem nada mas o defeito por enquanto e o numero 11!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<script language="javascript">
//esse codigo so funciona no ff  :(
var extenso=new Array();
extenso[0]= {numero:1,escrita:'um'};
extenso[1]= {numero:2,escrita:'dois'};
extenso[2]= {numero:3,escrita:'tres'};
extenso[3]= {numero:4,escrita:'quatro'};
extenso[4]= {numero:5,escrita:'cinco'};
extenso[5]= {numero:6,escrita:'seis'};
extenso[6]= {numero:7,escrita:'sete'};
extenso[7]= {numero:8,escrita:'oito'};
extenso[8]= {numero:9,escrita:'nove'};
extenso[9]= {numero:10,escrita:'dez'};
extenso[10]= {numero:11,escrita:'onze'};
extenso[11]= {numero:12,escrita:'doze'};
extenso[12]= {numero:13,escrita:'treze'};
extenso[13]= {numero:14,escrita:'quatorze'};
extenso[14]= {numero:15,escrita:'quinze'};
extenso[15]= {numero:16,escrita:'dezeseis'};
extenso[16]= {numero:17,escrita:'dezesete'};
extenso[17]= {numero:18,escrita:'dezoito'};
extenso[18]= {numero:19,escrita:'dezenove'};
extenso[19]= {numero:20,escrita:'vinte'};
extenso[20]= {numero:30,escrita:'trinta'};
extenso[21]= {numero:40,escrita:'quarenta'};
extenso[22]= {numero:50,escrita:'cinquenta'};
extenso[23]= {numero:60,escrita:'secenta'};
extenso[24]= {numero:70,escrita:'setenta'};
extenso[25]= {numero:80,escrita:'oitenta'};
extenso[26]= {numero:90,escrita:'noventa'};
extenso[27]= {numero:100,escrita:'cem'};
extenso[28]= {numero:200,escrita:'duzentos'};
extenso[29]= {numero:300,escrita:'trezentos'};
extenso[30]= {numero:400,escrita:'quatrocentos'};
extenso[31]= {numero:500,escrita:'quinhentos'};
extenso[32]= {numero:600,escrita:'seiscentos'};
extenso[33]= {numero:700,escrita:'setecentos'};
extenso[34]= {numero:800,escrita:'oitocentos'};
extenso[35]= {numero:900,escrita:'novecentos'};


function conta(){// funcao que  trasforma conteudo numerico escrito por extenso
    var valores= new Array();
    var a;
    a=document.getElementById("camp").value;
    unid=a.length - 1;
    for(var expo=0,unid;unid>=0;unid--,expo++){
         if(1==a[a.length-2] && a[unid]==1){//tratando 11 12 13....19
                valores[unid]=extenso[a[unid]+a[unid+1]-0-1].escrita; //-0 garente que o dado e numerico
                valores[unid+1]="";
        }
        else{    
            for(l=0;l<=35;l++){
                if(extenso[l].numero ==a[unid]*expoent(expo))
                    valores[unid]=extenso[l].escrita;
            }
        }
    }
    b=document.getElementsByTagName("table");
    b[0].rows[0].cells[1].textContent=formata(valores);    
}
function expoent(v){
    var mult=1;
    if(v==3)
        return mult;
    for(v;v>0;v--)
        mult=mult*10;
    return mult;
}
function formata(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";
        break;        
    }
    if(porExtenso[porExtenso.length-1]==" ")
        porExtenso=porExtenso.substr(0,porExtenso.length -2);
    return porExtenso;
}
</script>
<body>
<input type="text" size="10" id="camp" /><input type="button" onclick="conta()" />
<table>
    <tr>
        <td>por extenso:</td><td>aaaaaaaaaaaaa</td>
    </tr>
</table>
</body>
</html>

ta ai!

aceito todas as sugestoes :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

babaloricha,

copiei o codigo que você postou ai em cima,

e não funcionou nem com 11, nem com 1, nem com numero nenhum. hehehe

postou o codigo certo!? hehehe

at,

---

agora que eu vi o teu comentario dentro do codigo dizendo que só funciona no FF.

veja, eu não deixei o codigo pronto e redondo não.

apenas dei uma lapidada para funcionar o numero 11. hehe

ah! e deixei funcionando no FF e IE.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>teste</title>
</head>

<script language="javascript">
var extenso = new Array();

extenso[0] = {numero:1,escrita:'um'};
extenso[1] = {numero:2,escrita:'dois'};
extenso[2] = {numero:3,escrita:'tres'};
extenso[3] = {numero:4,escrita:'quatro'};
extenso[4] = {numero:5,escrita:'cinco'};
extenso[5] = {numero:6,escrita:'seis'};
extenso[6] = {numero:7,escrita:'sete'};
extenso[7] = {numero:8,escrita:'oito'};
extenso[8] = {numero:9,escrita:'nove'};
extenso[9] = {numero:10,escrita:'dez'};
extenso[10]= {numero:11,escrita:'onze'};
extenso[11]= {numero:12,escrita:'doze'};
extenso[12]= {numero:13,escrita:'treze'};
extenso[13]= {numero:14,escrita:'quatorze'};
extenso[14]= {numero:15,escrita:'quinze'};
extenso[15]= {numero:16,escrita:'dezeseis'};
extenso[16]= {numero:17,escrita:'dezesete'};
extenso[17]= {numero:18,escrita:'dezoito'};
extenso[18]= {numero:19,escrita:'dezenove'};
extenso[19]= {numero:20,escrita:'vinte'};
extenso[20]= {numero:30,escrita:'trinta'};
extenso[21]= {numero:40,escrita:'quarenta'};
extenso[22]= {numero:50,escrita:'cinquenta'};
extenso[23]= {numero:60,escrita:'secenta'};
extenso[24]= {numero:70,escrita:'setenta'};
extenso[25]= {numero:80,escrita:'oitenta'};
extenso[26]= {numero:90,escrita:'noventa'};
extenso[27]= {numero:100,escrita:'cem'};
extenso[28]= {numero:200,escrita:'duzentos'};
extenso[29]= {numero:300,escrita:'trezentos'};
extenso[30]= {numero:400,escrita:'quatrocentos'};
extenso[31]= {numero:500,escrita:'quinhentos'};
extenso[32]= {numero:600,escrita:'seiscentos'};
extenso[33]= {numero:700,escrita:'setecentos'};
extenso[34]= {numero:800,escrita:'oitocentos'};
extenso[35]= {numero:900,escrita:'novecentos'};

function expoent(v){
    var mult = 1;
    
    if ( v == 3 ) return mult;
        
    for ( v; v > 0; v-- ) mult = mult*10;
        
    return mult;
}

function formata(v,a){
    var porExtenso;
    var e = " e ";    
    
    alert(v);
    switch( v.length ) {
        case 1: porExtenso = v[0]; break;
        case 2: if ( eval(a) < 21 ) { porExtenso = v[0]; } else { 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"; break;        
    }
    
    if ( porExtenso[porExtenso.length-1] == " " )
        porExtenso = porExtenso.substr(0,porExtenso.length -2);
        
    return porExtenso;
}

function conta() {
    var valores = new Array();
    var a = document.getElementById("camp").value;
    
    unid = a.length - 1;
    for( var expo = 0, unid; unid >= 0; unid--, expo++ ) {
        if ( 1 == a[a.length-2] && a == 1) {
            valores[unid] = extenso[a-1].escrita;
            valores[unid+1] = "";
        } else {
            for ( l=0; l <= 35; l++ ) {
                if ( extenso[l].numero == eval(a) ) {
                    valores[unid] = extenso[l].escrita;
                }
            }
        }
    }
    
    document.getElementById("escreve").innerHTML = formata(valores,a);    
}
</script>
<body>

<input type="text" size="10" id="camp" name="camp">
<input type="button" value="transforma" onclick="java script:conta();">
<table>
    <tr>
        <td>por extenso:</td>
        <td><div id="escreve">aaaaaaaaaaaaa</div></td>
    </tr>
</table>

</body>
</html>

agora é contigo, termina ai. :)

at+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postado

Opa terminei!

bompra quem quiser testar do jeito que o mestre sam colocou ta melhor mas prp que eu preciso não posso usa getElementsById

mas ta ai!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<script language="javascript">
//esse codigo so funciona no ff  :(
var extenso=new Array();
extenso[0]= {numero:1,escrita:'um'};
extenso[1]= {numero:2,escrita:'dois'};
extenso[2]= {numero:3,escrita:'tres'};
extenso[3]= {numero:4,escrita:'quatro'};
extenso[4]= {numero:5,escrita:'cinco'};
extenso[5]= {numero:6,escrita:'seis'};
extenso[6]= {numero:7,escrita:'sete'};
extenso[7]= {numero:8,escrita:'oito'};
extenso[8]= {numero:9,escrita:'nove'};
extenso[9]= {numero:10,escrita:'dez'};
extenso[10]= {numero:11,escrita:'onze'};
extenso[11]= {numero:12,escrita:'doze'};
extenso[12]= {numero:13,escrita:'treze'};
extenso[13]= {numero:14,escrita:'quatorze'};
extenso[14]= {numero:15,escrita:'quinze'};
extenso[15]= {numero:16,escrita:'dezeseis'};
extenso[16]= {numero:17,escrita:'dezesete'};
extenso[17]= {numero:18,escrita:'dezoito'};
extenso[18]= {numero:19,escrita:'dezenove'};
extenso[19]= {numero:20,escrita:'vinte'};
extenso[20]= {numero:30,escrita:'trinta'};
extenso[21]= {numero:40,escrita:'quarenta'};
extenso[22]= {numero:50,escrita:'cinquenta'};
extenso[23]= {numero:60,escrita:'secenta'};
extenso[24]= {numero:70,escrita:'setenta'};
extenso[25]= {numero:80,escrita:'oitenta'};
extenso[26]= {numero:90,escrita:'noventa'};
extenso[27]= {numero:100,escrita:'cem'};
extenso[28]= {numero:200,escrita:'duzentos'};
extenso[29]= {numero:300,escrita:'trezentos'};
extenso[30]= {numero:400,escrita:'quatrocentos'};
extenso[31]= {numero:500,escrita:'quinhentos'};
extenso[32]= {numero:600,escrita:'seiscentos'};
extenso[33]= {numero:700,escrita:'setecentos'};
extenso[34]= {numero:800,escrita:'oitocentos'};
extenso[35]= {numero:900,escrita:'novecentos'};


function conta(){// funcao que  trasforma conteudo numerico escrito por extenso
    var valores= new Array();
    var a;
    a=document.getElementById("camp").value;
    a=verifica(a);
    unid=a.length - 1;
    marc11=0;
    for(var expo=0,unid;unid>=0;unid--,expo++){
         if(a[a.length-2]==1 && marc11==0){
             if(a[a.length-1]==1)
                 valores[unid-1]=extenso[10].escrita;
            else valores[unid-1]=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(extenso[l].numero ==a[unid]*expoent(expo))
                    valores[unid]=extenso[l].escrita;
            }
        }
    }
    alert(valores);
    b=document.getElementsByTagName("table");
    b[0].rows[0].cells[1].innerHtml=formata(valores);    
}
function expoent(v){
    var mult=1;
    if(v==3)
        return mult;
    for(v;v>0;v--)
        mult=mult*10;
    return mult;
}
function formata(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";
        break;        
    }
    if(porExtenso[porExtenso.length-1]==" ")
        porExtenso=porExtenso.substr(0,porExtenso.length -2);
    return porExtenso;
}
function verifica(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];
    }    
    else return valor;
}
</script>
<body>
<input type="text" size="10" id="camp" /><input type="button" onclick="conta()" />
<table>
    <tr>
        <td>por extenso:</td><td>aaaaaaaaaaaaa</td>
    </tr>
</table>
</body>
</html>

esse codigo se limita 1 a 9999 , caso alguém queira um range maior , se quiser uma maozinha pra mudar podeme adiciona no MSN! falow! :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora
Entre para seguir isso  
Seguidores 0