Problema com tipos primitivos

3 respostas
G

Pessoal, estou com um problema com tipos primitivos.

Tenho um método mais ou menos assim:

public void calcularMediaSituacao(String nota1, 
                                        String nota2, 
                                        String nota3, 
                                        String nota4, 
                                        String nota5, 
                                        String nota6 ) {
        
        Double totalNotas =0.0, valorNota1 = 0.0 , valorNota2 = 0.0, valorNota3 = 0.0 , valorNota4= 0.0 , valorNota5 = 0.0, valorNota6 = 0.0;
        Double mediaTempMant;
        Integer mediaTempInt;


        valorNota1 = Double.valueOf(nota1.replace(",", ".")) * Double.valueOf( "1" );
        valorNota2 = Double.valueOf(nota2.replace(",", ".")) * Double.valueOf( "2" );
        valorNota3 = Double.valueOf(nota3.replace(",", ".")) * Double.valueOf( "3" );
        valorNota4 = Double.valueOf(nota4.replace(",", ".")) * Double.valueOf( "4" );
        valorNota5 = Double.valueOf(nota5.replace(",", ".")) * Double.valueOf( "5" );
        valorNota6 = Double.valueOf(nota6.replace(",", ".")) * Double.valueOf( "6" );

        totalNotas = (valorNota1 + valorNota2 +  valorNota3 + valorNota4 + valorNota5 + valorNota6) / Integer.valueOf( "2" );
        mediaTempInt = totalNotas.intValue(); 
        mediaTempMant = totalNotas - mediaTempInt;
}

Se eu passar para esse método

calcularMediaSituacao("4,6", "8", "0", "0", "0", "0")

eu esperaria:
totalNotas = 6,3
mediaTempInt = 6
mediaTempMant = 0,3

Porém, a variável mediaTempMant, está ficando com o valor 0,[telefone removido]

O que está acontecendo? Qual cast que está errado?

3 Respostas

Enadrov

Cara não tem nada de errado com seu código
Testei seu código aqui deu tudo certo!

resultado foi 0.3000000000000007

G

Enadrov:
Cara não tem nada de errado com seu código
Testei seu código aqui deu tudo certo!

resultado foi 0.3000000000000007

E, em alguns momentos, até 0.[telefone removido] apareceu aqui, também…

M

O Double erra a partir de uma determinada casa.

Ex:

System.out.println(Double.valueOf(10.3) - Double.valueOf(10));

Resultado : 0.3000000000000007

Me parece que é isto que está acontecendo.

Tente usar o printf ou DecimalFormat

System.out.printf( "%.2f \n", Double.valueOf(10.3) - Double.valueOf(10) );
  System.out.println( new DecimalFormat("0.00").format(Double.valueOf(10.3) - Double.valueOf(10)) );

Mais uma coisa, utilizei os valores que você informou

porém o resultodo de mediaTempMant foi 0.3000000000000007 e não 0,[telefone removido] muito estranho

Criado 23 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 3
Participantes 3