Ir para conteúdo
Fórum Script Brasil
  • 0

Alterar função de formatação R$ para 3 casas decimais


jgd

Pergunta

Pessoal,

Seguinte, uso a função abaixo para formatar campo moeda em reais.

A medida que o usuário vai digitando o valor... A virgura e o ponto ( quando há) vai sendo inserida

automaticamente.

Daí o resultado fica assim: 123,00

Agora estou precisando trabalhar com 3 casas decimais. Ou seja : 123,000.

Agraço qualuer ajuda.

Chamos assim:

<input name="nome" value="0,00" onKeyPress="return(formatarMoeda(this,'.',',',event))" onKeyDown="apaga(this, ',' , '.' , event)">

function formatarMoeda(fld, milSep, decSep, e) {    
var sep = 0;
var key = '';    
var i = j = 0;    
var len = len2 = 0;
var strCheck = '0123456789';    
var aux = aux2 = '';    
var whichCode = (window.Event) ? e.which : e.keyCode; 

if (whichCode == 13) return true;  // Enter    
key = String.fromCharCode(whichCode);  // recebe o valor da chave vinda da chave do código   
  
if (strCheck.indexOf(key) == -1) 
    {return false;}   
len = fld.value.length;

if (len == 9) return false;


for(i = 0; i < len; i++)    
    if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;    
    aux = '';    
for(; i < len; i++) 
    if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);

    aux += key; 

    len = aux.length;    
    if (len == 0) fld.value = '';    
    if (len == 1) fld.value = '0'+ decSep  + aux;
 // if (len == 2) fld.value = '0'+ decSep + aux;

    if (len > 1) {
        inteiro = aux.slice(0,aux.length -2 )
        parcela = aux.slice(aux.length -2,aux.length )
        aux2 = '';    
        for (j = inteiro.length - 1, i = 0; j >= 0; i++, j--) {
            if (i % 3 == 0 && i != 0) {    
                aux2 = inteiro.charAt(j) + milSep  + aux2;                    
            }else    
                {aux2 = inteiro.charAt(j) + aux2;}
        }    
        fld.value = aux2 + decSep + parcela; 
    }
    
return false;    
}    

function apaga(fld, decSep, milSep , event)
{
var strCheck = '0123456789';  
var whichCode = (window.Event) ? event.which : event.keyCode; 
if(whichCode == 8)
    {

len = fld.value.length;    
for(i = 0; i < len; i++)    
    if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;    

    aux = '';    
    for(; i < len - 1; i++) 
    if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
    

    len = aux.length;    
    if (len == 0) fld.value = '0';    
    if (len == 1) fld.value = '0'+ decSep  + aux;    
//    if (len == 2) fld.value = '0'+ decSep + aux;

    if (len > 2) {
        inteiro = aux.slice(0,aux.length -2 )
        parcela = aux.slice(aux.length -2,aux.length )
        
        aux2 = '';    
        
        for (j = inteiro.length - 1, i = 0; j >= 0; i++, j--) {    
            if (i % 3 == 0 && i != 0) {
                aux2 = inteiro.charAt(j) + milSep  + aux2;                    
            }else    
                {aux2 = inteiro.charAt(j) + aux2;}
        }    
        fld.value = aux2 + decSep + parcela + '0';
    }
    }
}

//  End -->    
//-->

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...