Número negativo [RESOLVIDO]

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;
	}
}

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:

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

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

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

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:

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

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.

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

Consegui… fiz esse método “meio POG” mas ta funcionando :slight_smile:

[code]
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;
}
[/code]

Valeu Rodrigo

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; }

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.

Entendo…

Obrigado pelas dicas