Como saber se um numero esta em ponto flutuante?

5 respostas
V

Eu tenho o seguinte caso:

float num = "RECEBE QUALQUER NUMERO";

eu gostaria de saber assim, se ele recebesse numero inteiro tpw 5.0 ou 6.0 eu usaria a classe DecimalFormat para deixar assim: 5 ou 6, senao se fosse quebrado 5.21352 ou 6.123653 eu deixaria como esta.

Ex:

DecimalFormat df = new DecimalFormat("0");
if(num == !float){
    Systen.out.println(df.format(num));
}
else{
    Systen.out.println(num);
}

Obrigado pela ajuda, me deem exeplos de como fazer isto.

5 Respostas

A

Melhor usar double, porque float tem muito problema de arredondamento. Você pode converter o valor para inteiro (tipo long) e fazer a diferença com o valor anterior, se maior que zero daí tem casas decimais.

[]'s

V
Ah eu tava analisando aqui e consegui chegar a uma conclusão aqui que funcionou da maneira que eu gostaria:
public String formataCasoDecimal(String d) {
        String x = String.valueOf(calcs.getMemoria());
        for (int i = 0; i < x.length(); i++) {
            if (x.substring(i, i + 1).equals(".")) {
                if (x.substring(i + 1, i + 2).equals("0")) {
                    d = df.format(calcs.getMemoria());
                } else {
                    d = x;
                }
                break;
            }
        }
        return d;
    }

     System.out.println(String.valueOf(formataCasoDecimal(String.valueOf(num))));

Obs¹: Tanto double quanto float tem a msm dificuldade em arredondamento creio eu, e essa sua logica ai parece que é bem eficas mesmo.

Obs²: Adelar, você é de Cascavel-PR ?????? Minha familia mora em Cascavel-PR, gosto mto desse lugar de onde sou natural. E como anda a vida de programador ai ?

A

Ao invés de comparar com zero poderia usar também um valor muito próximo de zero, daí evita prováveis erros de ponto flutuante… 0,0000001 por exemplo.
Aqui é um bom lugar para trabalhar :D… em qual cidade vc está?

F

double tem uma maior precisão que float, faz o teste:

public class Main {

	public static void main(String[] args) {
		double a = .0;
		float b = .0f;

		for (int i = 0; i++ < 25;) {
			System.out.println((a += 0.1) + " - " + (b += 0.1));
		}
	}
}

E se for um número no valor de 5.0147? Vai apresentar 5?

V

Hmm, entendi, não sabia que o double tinha mais facilidade e precisão com ponto flutuante, obrigado por me darem estas dicas.

Eu estou em Taubaté-SP. :roll:


E se for um número no valor de 5.0147? Vai apresentar 5?

Tensooo, vou ter q revisar aqui e organizar para verificar todos os indices… ou melhor, ou utilisar o exemplo do colega ali em cima.

Criado 2 de maio de 2011
Ultima resposta 2 de mai. de 2011
Respostas 5
Participantes 3