Jump to content


Photo

Formatar Dados Em Real (r$)


  • Faça o login para participar
7 replies to this topic

#1 Hambonso

Hambonso

    12 Horas

  • Usuários
  • 124 posts
  • Sexo:Não informado

Posted 06/08/2005, 14:18

Eu tenho um formulário que permite ao administrador inserir, alterar algums dados entre eles valores monetários (R$), mas eu gostaria que após a edição do campo, o valor já fosse formatado para real, pois normalmente quando eu quero informar o valor que seja menor que um mil reais eu tenho que digitar 1000 ou 1000.00, mas o que eu quero é que durante a digitação dos valores, eu não me preocuraria com a pontuação, ou seja:

- Para eu inserir um valor de R$ 10,00 eu teria que digitar 1000
- Para eu inserir um valor de R$ 1.000,00 eu teria que digitar 100000
- Para eu inserir um valor de R$ 1.235,15 eu teria que digitar 123515


Tem como fazer isso durante o processo de digitação dos valores ?...

Obrigado

#2 Arak

Arak

    Normal

  • Usuários
  • 89 posts
  • Sexo:Não informado

Posted 06/08/2005, 14:45

Saudações....

Veja se te ajuda...

<script>
function valor(){
cifra = "R$ "
if(document.getElementById('mascara').value.length == "0"){
	document.getElementById('mascara').value = cifra
    }
if(document.getElementById('mascara').value.length == "4"){
	document.getElementById('mascara').value += "."
    }
if(document.getElementById('mascara').value.length == "8"){
	document.getElementById('mascara').value += ","
    }
if(document.getElementById('mascara').value.length == "12"){
	document.getElementById('mascara').value += ","
    }
  }
</script>
<form name="moeda">
Digite o valor:<input type="text" name="mascara" id="mascara" onKeyPress="valor()">
</form>

espero ter ajudado.

#3 Hambonso

Hambonso

    12 Horas

  • Usuários
  • 124 posts
  • Sexo:Não informado

Posted 06/08/2005, 15:20

Caro Arak

Foi de grande ajuda o código que vc me passou, mas no caso se vc quiser mencionar um valor de R$ 10,00 ele não dá certo ... pois se vc quizer mencionar 10,00 vc precisaria digitar 1000 ... mas nesse caso e mostra 100.0 ...

Mas valeu pela ajuda

#4 myaccount2lists

myaccount2lists

    Ativo

  • Usuários
  • 347 posts
  • Sexo:Masculino

Posted 02/09/2005, 12:25

O Code abaixo é uma máscara monetária que só aceita numerico. Porem so funciona perfeitamente no IE. No Mozilla ele mascara sempre 2 digitos e nao um por vez. Alguem saberia resolver? Abraços

function MM_formatMoney(_this,tamMax,teclapres) {
	var tecla = teclapres.keyCode;
	var vr = _this.value;
	vr = vr.replace( "/", "" );
	vr = vr.replace( "/", "" );
	vr = vr.replace( ",", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	tam = vr.length;
	if ( tam < tamMax && ( (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ) ) {
  if(tecla >=96 && tecla <=105) {
  tecla = tecla - 48;
	}
	vr = vr + (String.fromCharCode(tecla));
	tam +=1;
	if ( tam <= 2 ){
  _this.value = vr;
	}
	if ( (tam > 2) && (tam <= 5) ){
  _this.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam); }
  if ( (tam >= 6) && (tam <= 8) ){
 	 _this.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 9) && (tam <= 11) ){
 	 _this.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 12) && (tam <= 14) ){
 	 _this.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 15) && (tam <= 17) ){
 	 _this.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam);}
  } else if (tecla == 8 ){
  tam = tam - 1;
  _this.value = vr.substr(0,tam);
	}
	window.event.cancelBubble = true;
	window.event.returnValue = false;
}

Para testar

<input name="valor" type="text" id="valor" value="R$" onfocus="this.value='';" onkeydown="return MM_formatMoney(this,'14',event);" />


#5 arthurlucena

arthurlucena

    Imamade nandomo..

  • Usuários
  • 343 posts
  • Sexo:Masculino
  • Localidade:João Pessoa
  • Interesses:Desenho, artes gráficas, fotografia, games, praia, cinema, animes, cultura japonesa, tecnologia, desenvolvimento para web entre outras coisas =)

Posted 27/09/2005, 15:56

Cara estou com o mesmo problema! Tenho uma máscara semelhante a sua, porém está ocorrendo um erro quando o usuário digita um número próximo a quantidade máxima permitida. Ou a casa decimal se reduz a uma ("1.000.000,0") ou fica com três ("1.000.000,000"). Aqui estão as máscaras:


function verificaNumero(objEvent) {
 
var reKeyboardChars = /[\x00\x0D\x2D\x2F\x2E\x2C\x25]/;
var reValidChars = /[\x09\x0B\d]/;

var iKeyCode, strKey, objInput; 
             
    if (isIE) {
      iKeyCode = objEvent.keyCode;
      objInput = objEvent.srcElement;
    } else {
      iKeyCode = objEvent.which;
      objInput = objEvent.target;
    }
             
    strKey = String.fromCharCode(iKeyCode);
 
    strKey = String.fromCharCode(iKeyCode);
   
if (iKeyCode == 9) return true;
 
    if (!reValidChars.test(strKey) &&
      !reKeyboardChars.test(strKey)) {
      //alert("Invalid Character Detected!\nKeyCode = " + iKeyCode + "\nCharacter =" + strKey);
      return false;
    }
  }



function FormataValor(obj,tammax,teclapres) {
var tecla = teclapres.keyCode;
vr = obj.value;
vr = vr.replace( "/", "" );
vr = vr.replace( "/", "" );
vr = vr.replace( ",", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
vr = vr.replace( ".", "" );
tam = vr.length;

if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }

if (tecla == 8 ){ tam = tam - 1 ; }
 
if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
  if ( tam <= 2 ){
    obj.value = vr ; }
  if ( (tam > 2) && (tam <= 5) ){
    obj.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }
  if ( (tam >= 6) && (tam <= 8) ){
    obj.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
  if ( (tam >= 9) && (tam <= 11) ){
    obj.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
  if ( (tam >= 12) && (tam <= 14) ){
    obj.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
  if ( (tam >= 15) && (tam <= 17) ){
    obj.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}
}
 
}


E aqui um exemplo de aplicação

<input name="valorTotal" type="text" size="12" maxlength="15" class="input" tabindex="1" onkeypress="return verificaNumero(event)" onkeydown="FormataValorNew(this,15,event)">


Se alguém aqui puder me ajudar, ficarei grato! =)
...........darkness.........²d¬¬b²
A vida é muito curta para se preocupar com o que as outras pessoas pensam. Viva.
Arthur Lucena..................貴族
arthurlucena at email dot com
[O'']olhares.com/arthurlucena

#6 Alan Borim

Alan Borim

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 01/04/2009, 10:19

Resolvido IE + FIREFOX

O Code abaixo é uma máscara monetária que só aceita numerico. Porem so funciona perfeitamente no IE. No Mozilla ele mascara sempre 2 digitos e nao um por vez. Alguem saberia resolver? Abraços

function MM_formatMoney(_this,tamMax,teclapres) {
	var tecla = teclapres.keyCode;
	var vr = _this.value;
	vr = vr.replace( "/", "" );
	vr = vr.replace( "/", "" );
	vr = vr.replace( ",", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	tam = vr.length;
	if ( tam < tamMax && ( (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ) ) {
  if(tecla >=96 && tecla <=105) {
  tecla = tecla - 48;
	}
	vr = vr + (String.fromCharCode(tecla));
	tam +=1;
	if ( tam <= 2 ){
  _this.value = vr;
	}
	if ( (tam > 2) && (tam <= 5) ){
  _this.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam); }
  if ( (tam >= 6) && (tam <= 8) ){
 	 _this.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 9) && (tam <= 11) ){
 	 _this.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 12) && (tam <= 14) ){
 	 _this.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }
  if ( (tam >= 15) && (tam <= 17) ){
 	 _this.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam);}
  } else if (tecla == 8 ){
  tam = tam - 1;
  _this.value = vr.substr(0,tam);
	}
	window.event.cancelBubble = true;
	window.event.returnValue = false;
}

Para testar

<input name="valor" type="text" id="valor" value="R$" onfocus="this.value='';" onkeydown="return MM_formatMoney(this,'14',event);" />



Galera o velho e chato problema de compatibilidade entre os navegadores, é um saco mesmo.

Usei esse código do Thalis, que diga-se de passagem é show, mas tava com o problema do firefox, eu dei uma olhada e achei uma solução incluindo um verificador de navegador no código, segue o trecho que resolve o problema.

navegador = /msie/i.test(navigator.userAgent);
if (navegador)
vr += String.fromCharCode(tecla);


Na instrução que inclui o número pelo seru CharCode agente faz a verificação do uso do navegador, o que eu descobri é que se não colocar esse cara no firefox o código funciona direitinho mas no ie da pau


Espero que ajude.
Abraços

#7 unidimension

unidimension

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Masculino
  • Localidade:Brasília

Posted 17/10/2010, 17:22

Galera, consegui resolver o problema, inclusive funciona nos dois navegadores.

O código é simples, prático de entender e funcional:

Primeiro o script:
function MascaraMoeda(campo){//Cada vez que a tecla é liberada...
    //Impedimos entrada de letras...
    SomenteNumeroPontoVirgula(campo);
    //Removemos vírgula e ponto da mácara, se tiver...
    var valor = limpar(campo.value,"0123456789");
    //Obtemos o tamanho somente dos números...
    var tamanho    = valor.length;

    if(tamanho == 3){
        mascaraCampo(campo,'#,##');
    }

    if(tamanho == 4){
        mascaraCampo(campo,'##,##');
    }

    if(tamanho == 5){
        mascaraCampo(campo,'###,##');
    }

    if(tamanho == 6){
        mascaraCampo(campo,'#.###,##');
    }

    if(tamanho == 7){
        mascaraCampo(campo,'##.###,##');
    }

    if(tamanho == 8){
        mascaraCampo(campo,'###.###,##');
    }
}

//Entrada de números e caracteres específicos apenas
function SomenteNumeroPontoVirgula(campo){
    var digits="0123456789,."
    var campo_temp
    for (var i=0;i<campo.value.length;i++){
        campo_temp=campo.value.substring(i,i+1)
        if (digits.indexOf(campo_temp)==-1){
            campo.value = campo.value.substring(0,i);
            break;
        }
    }
}

// Limpa um string
function limpar(valor,conjuntoVerdade) {
    var resultado = "";
    for( var a = 0; a < valor.length ; a++ ) {
        if ( conjuntoVerdade.indexOf(valor.substring(a,a+1)) >= 0 ) {
            resultado += valor.substring(a,a+1);
        }
    }
    return resultado;
}

// Formatação de mascara
function mascaraCampo(campo,formatoMascara) {
    var valorLimpo = limpar(campo.value,"0123456789");
    var resultado = "";
    var b = 0;
    for( var a = 0; a < formatoMascara.length ; a++ ) {
        if ( formatoMascara.substring(a,a+1) == "#" ) {
            resultado = resultado + valorLimpo.substring(b,b+1);
            b++;
            if ( b >= valorLimpo.length ) {
                break;
            }
        } else {
            resultado = resultado + formatoMascara.substring(a,a+1);
        }
    }
    campo.value = resultado;
}

Agora para utilizar:
<input type="text" id="valor" name="valor" value="${valor}" size="19" style="text-align:right" maxlength="10" onkeyup="MascaraMoeda(this)"/>

Obs.: Eu limitei para aceitar valores até 999.999,99. O tamanho total do campo, mas vocês podem personalizar.

Espero ter ajudado.

#8 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 17/10/2010, 17:25

Veja esse tópico:

http://forum.wmonlin...0
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq