Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mexicanox

[Resolvido] Problemas com Float

Recommended Posts

beleza pessoal !!!!!!!!!!

 

seguinte, eu to fazendo um trabalho da escola, na verdade ja esta pronto so que eu to tendo um pequeno problema.

 

Resumindo o que eu fiz foi criar um JOptionPane e colocar as opções de um radio, tipo aumentar volume, mudo, AM/FM etc.

 

O que acontece é que tem o tunner do radio, por exemplo se eu estou na radio 102.1 e aumento o tunner deveria de ir para a radio 102.2. Entao o que qualquer iniciante faria e foi o que eu fiz somei 0.1 no tunner so que o resutado que saiu continuando o exeplo acima foi 103.2

 

para ficar mais claro os resutados sao esses, lebrando que estou pegando o valor atual do tunner e somando 0.1.

 

Frequencia: FM

Tunner: 103.2

--------------------------------------

 

Frequencia: FM

Tunner: 104.299995 - Aqui deveria ser 103.3

--------------------------------------

 

Frequencia: FM

Tunner: 105.399994 - Aqui deveria ser 103.4

--------------------------------------

 

Frequencia: FM

Tunner: 106.49999 - Aqui deveria ser 103.5

--------------------------------------

 

Frequencia: FM

Tunner: 107.59999 - Aqui deveria ser 103.6

--------------------------------------

 

Frequencia: FM

Tunner: 108.69999

--------------------------------------

 

Frequencia: FM

Tunner: 109.79999

--------------------------------------

 

Frequencia: FM

Tunner: 110.89999

--------------------------------------

 

 

Como eu faço para funcionar do jeito que eu preciso?

 

O metodo que aumenta o tunner é esse

        //Tunner Aumenta
	public void setAumentaTunner(){
		if(frequencia.equals("FM") && tunner == 108.0f)	tunner = 87.5f;
		else tunner += 0.1f; 
		
		if(frequencia.equals("AM") && tunner == 172.0f)	tunner = 52.0f;
		else tunner += 1.0f;
		
		System.out.println("Frequencia: " +frequencia +"\nTunner: " +tunner +"\n--------------------------------------\n");
	}

eu pesquisei e alguns lugare diziam que era melhor usar a classe DecimaFormat ou BigDecimal, so que eu nao entendi como usa-las.

 

flws.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá um print no Tunner, veja o que está trazendo.

 

E se você der um ParseFloat no Tunner ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui resolver parte do problema, na verdade o que estava acontecendo era apenas um erro de logica do jeito que estava sempre caia nos dois "else" entao aumentava sempre 1.1 e nao o 0.1 que eu equeria, o metodo consertado ficou assim:

public void setAumentaTunner(){
		//verifica a frequencia da radio
		//caso seja FM 
		if(frequencia.equals("FM")){
			//se estiver no fim da frequencia volta para o inicio
			if(tunner >= 108.0f)	tunner = 87.5f;
			//senao aumenta 0.1
			else tunner += 0.1f;
		}else{ // idem acima, porem para AM
			if(tunner >= 172.0f)	tunner = 52.0f;
			else tunner += 1.0f;
		}
	}

 

o problema agora é que vem um monte de casa decimal e eu queria apenas 1, o que ta saindo agora é:

 

102.299995

102.399994

102.49999

102.59999

102.69999

102.79999

102.89999

102.999985

103.09998

103.19998

103.29998

103.39998

 

O que eu to querendo agora é pegar so a primeira casa decimal tipo:

102.3

102.4

102.5

102.6

102.7

102.8

...

 

fwls

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

o problema agora é que vem um monte de casa decimal e eu queria apenas 1, o que ta saindo agora é:

 

102.299995

102.399994

102.49999

102.59999

102.69999

102.79999

102.89999

102.999985

103.09998

103.19998

103.29998

103.39998

 

O que eu to querendo agora é pegar so a primeira casa decimal tipo:

102.3

102.4

102.5

102.6

102.7

102.8

...

 

fwls

 

Use saida formata...

System.out.printf("%.1f",valor);
O ".1" entre % e o f permite formatar a saida de modos que seje apresentada apenas uma casa decimal depois da parte inteira...

Mas atenção, isso pode gerar um pequeno problema. Por exemplo, se o valor for igual a 23.395 será impressso 23.4, porque ele automaticamente arredonda por excesso.

 

Mas como podemos notar, existe um padrão que é: fequencia é sempre igual a um numero de 4 digitos(ex:102.2), que se fossemos a contar em caracter teriamos 5(1,0,2,.,2) porque o "." tbm conta. Então você pode fazer o seguinte: antes de imprimir converta a frequencia em String e depois imprima apenas os 5 caracteres desejado.

 

Por exemplo:

float num=102.299995F;
String numConvertido = ""+num;
System.out.printf("%s",numConvertido.substring(0,5));

Espero ter ajudado... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema é que eu preciso de msotrar o resultado em um JOptionPane.

 

ja vi em alguns lugares falando para usar a classe DecimalFormat. Se essa for uma boa opcao eu quero saber como usar a classe por que eu nao entendi direito.

 

flws.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema é que eu preciso de msotrar o resultado em um JOptionPane.

 

ja vi em alguns lugares falando para usar a classe DecimalFormat. Se essa for uma boa opcao eu quero saber como usar a classe por que eu nao entendi direito.

 

flws.

 

Cara é só trocar...

float num=102.299995F;

String numConvertido = ""+num;

System.out.printf("%s",numConvertido.substring(0,5));

 

use assim:

float num=102.299995F;
String numConvertido = ""+num;
javax.swing.JOptionPane.showMessageDialog(null,numConvertido.substring(0,5));

Se quiser saber como funciona a classe DecimalFormat o jeito é fussar no javadoc ... Abraço

flw http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.