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

Inferno Dos Números


bigodines

Pergunta

Galera,

preciso armazenar numeros num campo double (são valores de imóveis), o problema é que não tenho como especificar a um usuário o padrão que tem que ser... preciso com que o sistema entenda os número que o usuário digitar.

ou seja, se o cara digitar 120 o sistema transforma em 120,00 e na hora de submeter ele transforma em 120.0 (essa última transformação tá tranquilo).

daí se o cara digita 120,00 tem que só transformar pra 120.0, o que tá tranquilo também.

se o cara digitar 1.120 tem que fazer virar 1120.0...

Bom, muita coisa disso eu já consegui fazer funcionar com as funções que vou postar abaixo. O que eu não estou conseguindo fazer é o controle da virgula... independente do que o cara digitar, ele bota a vírgula nas duas últimas casas, então vou ter que obrigar o cara a digitar os centavos. Preciso de uma mão pra corrigir isso... sei que grande parte do pessoal aqui já trabalhou com número e vai poder dar uma ajuda.

A função que estou usando é essa:

function maskCurrency(val, milSep, decSep) {
        /* removing previous format */
        s = val;        

        filteredValues = ".";     // Characters stripped out
        var i;
        var returnString = "";
        for (i = 0; i < s.length; i++) {  // Search through string and append to unfiltered values to returnString.
            var c = s.charAt(i);
            if (filteredValues.indexOf(c) == -1) returnString += c;
        }
        val = returnString;
        val =val.split(',').join('.');
        /* re-formating. :P */
	var aux="";
	var aux2="";

	var i,j;
  	
	len = val.length;
	if (len == 0) {
  aux = '';
	} else if (len == 1) {
  aux = '0'+ decSep + '0' + val;
	} else if (len == 2) {
  aux = '0'+ decSep + val;
	} else if (len > 2) {
  aux2 = '';

  for (j = 0, i = len - 3; i >= 0; i--) {
  	if (j == 3) {
    aux2 += milSep;
    j = 0;
  	}
  	aux2 += val.charAt(i);
  	j++;
  }
  aux = '';
  len2 = aux2.length;
  for (i = len2 - 1; i >= 0; i--) {
  	aux += aux2.charAt(i);
  }
  aux += decSep + val.substr(len - 2, len);
	}	
	return aux;
}

Abraço,

Matheus

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Galera,

preciso armazenar numeros num campo double (são valores de imóveis), o problema é que não tenho como especificar a um usuário o padrão que tem que ser... preciso com que o sistema entenda os número que o usuário digitar.

ou seja, se o cara digitar 120 o sistema transforma em 120,00 e na hora de submeter ele transforma em 120.0 (essa última transformação tá tranquilo).

daí se o cara digita 120,00 tem que só transformar pra 120.0, o que tá tranquilo também.

se o cara digitar 1.120 tem que fazer virar 1120.0...

Bom, muita coisa disso eu já consegui fazer funcionar com as funções que vou postar abaixo. O que eu não estou conseguindo fazer é o controle da virgula... independente do que o cara digitar, ele bota a vírgula nas duas últimas casas, então vou ter que obrigar o cara a digitar os centavos. Preciso de uma mão pra corrigir isso... sei que grande parte do pessoal aqui já trabalhou com número e vai poder dar uma ajuda.

A função que estou usando é essa:

function maskCurrency(val, milSep, decSep) {
        /* removing previous format */
        s = val;        

        filteredValues = ".";     // Characters stripped out
        var i;
        var returnString = "";
        for (i = 0; i < s.length; i++) {  // Search through string and append to unfiltered values to returnString.
            var c = s.charAt(i);
            if (filteredValues.indexOf(c) == -1) returnString += c;
        }
        val = returnString;
        val =val.split(',').join('.');
        /* re-formating. :P */
	var aux="";
	var aux2="";

	var i,j;
  	
	len = val.length;
	if (len == 0) {
  aux = '';
	} else if (len == 1) {
  aux = '0'+ decSep + '0' + val;
	} else if (len == 2) {
  aux = '0'+ decSep + val;
	} else if (len > 2) {
  aux2 = '';

  for (j = 0, i = len - 3; i >= 0; i--) {
  	if (j == 3) {
    aux2 += milSep;
    j = 0;
  	}
  	aux2 += val.charAt(i);
  	j++;
  }
  aux = '';
  len2 = aux2.length;
  for (i = len2 - 1; i >= 0; i--) {
  	aux += aux2.charAt(i);
  }
  aux += decSep + val.substr(len - 2, len);
	}	
	return aux;
}

Abraço,

Matheus

Por quê você já não transforma 120 em 120.00 de uma vez?

Link para o comentário
Compartilhar em outros sites

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,5k
×
×
  • Criar Novo...