Problemas com a declaração de VARIÁVEL float [RESOLVIDO]

4 respostas
eliphas

Eu estou fazendo um trabalho para a minha faculdade, mas estou tendo dificuldades coma declaração de variáveis do tipo float.

O código é o seguinte:

Arquivo A01E01.java (executável):
public class A01E01{
	public static void main(String args[]){
		Flor flor1 = new Flor("Rosa", 5, 5);
		Flor flor2 = new Flor("Margarida", 23, 3);
		
		flor1.getDados();
		flor2.getDados();
	}
}
Arquivo Flor.java:
public class Flor{
	String nome;
	int petalas;
	float preco;
		
	public Flor(String nome, int petalas, float preco){
		this.nome = nome;
		this.petalas = petalas;
		this.preco = preco;
	}
	
	public void getDados(){
		System.out.printf("Nome   : ");
		System.out.println(this.nome);
		System.out.printf("Pétalas: ");
		System.out.println(this.petalas);
		System.out.printf("Preço  : ");
		System.out.println(this.preco);
		System.out.println();
	}
}
Quando eu digito float com valor inteiro (como no código) dá certo, mas se colocar alguma casa decimal dá erro. Infelizmente, não posso usar double nesse caso (o que seria a salvação...). O exercício pode ser entregue assim, mas eu queria é tirar a dúvida...

4 Respostas

joede.fadel

eliphas:
Eu estou fazendo um trabalho para a minha faculdade, mas estou tendo dificuldades coma declaração de variáveis do tipo float.

O código é o seguinte:

Arquivo A01E01.java (executável):

public class A01E01{
	public static void main(String args[]){
		Flor flor1 = new Flor("Rosa", 5, 5); //no ultimo 5 o valor 5.0
		Flor flor2 = new Flor("Margarida", 23, 3); //no ultimo 3 o valor 3.0
		
		flor1.getDados();
		flor2.getDados();
	}
}

F

Quando você digita um valor inteiro na variável de tipo float dá certo porque um valor int é menor do que um valor float. Em outras palavras, a quantidade de bits que um int(16 bits) pode armazenar é menor do que a quantidade de bits que um float(32 bits) pode armazenar. Então você pode colocar um int dentro de um float.

Quando você passa um valor decimal para um float, o valor decimal é por padrão considerado um double. Então você está atribuindo um double para um float. Só que um double(64 bits) é maior que um float(32 bits). Você não pode colocar uma tipo maior em um tipo menor sem que haja perda de precisão, como neste caso, e então o compilador reclama.

Soluções:

  • Você declara sua variável como double - mas você não quer.
  • Faz um conversão explicita de double para float.
  • Você também pode usar as classes Wrappers para isso.
  • Ou ainda, caso você esteja passando um valor literal, é só acrescentar a letra f no final do valor, que assim o compilador sabe que você quer que aquele ponto flutuante não seja um double, mas sim um float.

Se não souber como fazer, dá um toque aí que tentarei ajudar.
:thumbup:

marcoswp3x

Como foi citado anteriormente, por questões de tamanho e tipos, vc precisa converter o número decimal (double) para float.
Você pode fazer isso assim:

Flor flor1 = new Flor("Rosa", 5.0F, 5.0F);
eliphas

fernandoeick:

  • Ou ainda, caso você esteja passando um valor literal, é só acrescentar a letra f no final do valor, que assim o compilador sabe que você quer que aquele ponto flutuante não seja um double, mas sim um float.

marcoswp3x:
Como foi citado anteriormente, por questões de tamanho e tipos, vc precisa converter o número decimal (double) para float.
Você pode fazer isso assim:

Flor flor1 = new Flor("Rosa", 5.0F, 5.0F);


Entendi essa parada de tamanho (que ninguém me explicou antes nas aulas =P). Funcionou direitinho…

Valeu mesmo!

Criado 19 de fevereiro de 2009
Ultima resposta 19 de fev. de 2009
Respostas 4
Participantes 4