Resultado float errado? [RESOLVIDO]

4 respostas
pedroroxd

Pessoal, estou com um problema em utilização de Float:

String quanted = jTextField2.getText();
        Float quantedd = Float.parseFloat(quanted);

        String preco = jTextField3.getText();
        Float precoo = Float.parseFloat(preco);
        Float quanti = quantedd * precoo;
        String numero = new Float(quanti).toString();

Caso o quantedd seja 1.3 por exemplo, e a quanti 3, a multiplicação deles resulta em 3,888888889, ou algo do tipo...
O que eu posso fazer para continuar tendo casa com vírgula, mais certinho (3*1,3 = 3,9)?

Não intendi porque ele faz 1,3 * 3 = 3,888889...

Obrigado ae...

4 Respostas

J
String quanted = "1.3";  
		           
		    		Float quantedd = Float.parseFloat(quanted);  
		      
		           
		    		String preco = "3";  
		           
		    		Float precoo = Float.parseFloat(preco);  
		           
		    		Float quanti = quantedd * precoo;  
		          
		           // formatando o número, o ".2" ali esta dizendo que vao ter 2 cadas apos a virgula
                          // f indica que é um float (jah te adianto que nao existe double)
                         // dá uma procurada sobre String.format    que vc vai entender melhor
                    // basicamente esse código formata o número para reduzir as casas decimais, com o arredondamento ele bota para a forma que você pediu 3.90
 

		    		String formatada = String.format("%1$.2f",quanti);
		
		           System.out.println(formatada);

o comportamento das casas decimais não é muito fácil de entender não … eu tambem nun sei… se vc quiser pode esquisar o assunto o modificador strictfp talvez faça algo … nao sei procura ele no google c vai ver

o jeito acima detorna 3,90 se vc não quiser com virgula e sim ponto é só vc substituir a linha do format por:

String formatada = String.format(Locale.US,"%1$.2f",quanti);

observação …

ai vc está fazendo um uso exagerado das classes Wrapper, vc pode usar mais os tipos primitivos:

String quanted = "1.3";  
		           
		    		float quantedd = Float.parseFloat(quanted);  
		      
		           
		    		String preco = "3";  
		           
		    		float precoo = Float.parseFloat(preco);  
		           
		    		float quanti = quantedd * precoo;  
		          
		           
		    		String formatada = String.format("%1$.2f",quanti);
		
		           System.out.println(formatada);

mais detalhes sobre as classes wrapper … tem um artigo no meu site:
(momento propaganda hehehe)
http://www.antoniorafael.eti.br/index.php?option=com_content&view=article&id=48:classes-wrapper&catid=35:conceitos-basicos&Itemid=55

uma caçada no google vc tambem acha bastante sobre o que sao classes wrapper

pedroroxd

Opa… Valew ae, foi bem útil :wink:

RESOLVIDO

sergiotaborda
pedroroxd:
Pessoal, estou com um problema em utilização de Float:
String quanted = jTextField2.getText();
        Float quantedd = Float.parseFloat(quanted);

        String preco = jTextField3.getText();
        Float precoo = Float.parseFloat(preco);
        Float quanti = quantedd * precoo;
        String numero = new Float(quanti).toString();

Caso o quantedd seja 1.3 por exemplo, e a quanti 3, a multiplicação deles resulta em 3,888888889, ou algo do tipo...
O que eu posso fazer para continuar tendo casa com vírgula, mais certinho (3*1,3 = 3,9)?

Não intendi porque ele faz 1,3 * 3 = 3,888889...

Nem todos os numero são representáveis com float. Não utilize float ou double para calculos se vc não sabe trabalhar com eles ( pela sua pergunta vc não sabe ;) ).

Utilize BigDecimal para fazer esse tipo de calculo.

J

verdade… tambem tem isso ae

Criado 8 de setembro de 2009
Ultima resposta 9 de set. de 2009
Respostas 4
Participantes 3