Número negativo [RESOLVIDO]

11 respostas
P

Pessoal,

tenho um método que verifica se possui apenas número um campo… só que eu precisar tirar o sinal de “-” (menos) para aceitar número negativo, alguém poderia me ajudar?

public class VerificaString {

	public boolean apenasNumeros(String str) {

		// verifica se é vazio ou nulo
		if (str == null || str.length() == 0)
			return true;

		for (int i = 0; i < str.length(); i++) {

			// Se o digito for diferente de um digito, retorna falso.
			if (!Character.isDigit(str.charAt(i)))
				return false;
		}
		return true;
	}
}

11 Respostas

Rodrigo_Sasaki

Isso é um assunto que já foi bastante discutido aqui no GUJ, se pesquisar você encontra.

Mas a base é a seguinte: O que é um número para você? um número inteiro? ou com decimais?

Se for somente números inteiros, tente converter utilizando Integer.parseInt, se funcionar, é um número :slight_smile:

P

assim o valor recebido vem em forma de string, (que pode vir -1 como -2,00 (que tbm teria que trocar , por . ))
só na hora de inserir no banco que eu converto (?::varchar)::numeric

Rodrigo_Sasaki

então use o método Double.parseDouble, mas nesse caso sim, você precisa tratar os separadores corretamente.

Pode ou alterar a String, ou setar um Locale diferente

P

Valeu Rodrigo

Mas não tenho ideia de como fazer… pois só queria melhorar essa verificação minha verificando se tem apenas números e se os números são negativos e trocar a vírgula por ponto

Rodrigo_Sasaki

Faça em etapas.

1 - Deixe no formato correto, substitua os pontos e deixe como quer
2 - Tente converter para um double

Se tudo der certo, ele é um número, independente de ser negativo ou positivo, se não der, não é um número :slight_smile:

P

Oi Rodrigo

Tentei colocar assim:

String numeroPonto = custo.replaceAll("\\,", "."); Double.parseDouble(numeroPonto); resultado = numeroPonto.toString();

Só que da erro no Double.parseDouble(numeroPonto); quando entra um caracter (simulando como se o usuário digitasse um texto no lugar de número)

Nos outros casos ele converte certinho a vírgula por ponto… e recebe o sinal de negativo

Rodrigo_Sasaki

Mas a ideia é justamente essa. se for lançada uma exceção, quer dizer que não é um número. Seu método deve tratar isso.

P

Entendi agora o que vc estava querendo passar... foi mal...

Consegui.. fiz esse método "meio POG" mas ta funcionando :)

public String campoCusto (String custo){
		String resultado = null;
		
		try {
		String numeroPonto = custo.replaceAll("\\,", ".");  
		Double.parseDouble(numeroPonto);
		resultado = numeroPonto.toString();
		
		} catch (Exception e) {
			if (custo.isEmpty()){
				resultado = "0";
			} else {
				resultado = "erro";
			}
		} 
		System.out.println(resultado);  
		
		
		return resultado;
	}

Valeu Rodrigo

Rodrigo_Sasaki

Agora que você conseguiu, já passo uma dica. É legal encapsular essas coisas, pra não ter que ficar olhando pra código que você acha feio :slight_smile: Algo assim:public boolean isNumber(String num){ boolean isNumber; try{ Double.parseDouble(num); isNumber = true; } catch (NumberFormatException e){ isNumber = false; } return isNumber; }

drsmachado

Embora dê praticamente no mesmo, eu prefiro usar a apache commons-lang e a classe NumberUtils. Ela possui métodos que facilitam essa análise.
isDigit que diz se o valor informado contém apenas dígitos e isNumber, indicando se o valor informado é um número.

P

Entendo…

Obrigado pelas dicas

Criado 12 de setembro de 2013
Ultima resposta 13 de set. de 2013
Respostas 11
Participantes 3