Duvida besta de soma de float
ola pessoal estou fazendo uma calculadora aqui
porem quando vou somar 2 valores floats valor1 = 0.39 e valor2 2.0 ele esta retornando 2.3899999
codigo :
float valor1 = Float.valueOf(valorAnterior);
float valor2 = Float.valueOf(texto.getText());
float resultado = valor1 + valor2;
texto.setText(String.valueOf(resultado));
onde valor anterior é um string valendo “0.39”
e o valor do texto.getText = “2”
agradeço a ajuda
Achei essa pergunta muito interessante e andei fazendo uns testes. Utilizei o código seguinte para verificar a saída:
[code]public static void main (String[] args)
{
for(int c = 0; c < 10; c++ )
{
for(int k = 0; k < 10; k++)
{
String valorAnterior = “0.3” + k + “f”;
String texto = String.valueOf©;
Float f1 = Float.valueOf(valorAnterior);
Float f2 = Float.valueOf(texto);
float valor1 = f1.floatValue();
float valor2 = f2.floatValue();
float resultado = valor1 + valor2;
System.out.println(resultado);
}
}
}[/code]
E veja só a saída
0.3
0.31
0.32
0.33
0.34
0.35
0.36
0.37
0.38
0.39
1.3
1.31
1.3199999
1.33
1.34
1.35
1.36
1.37
1.38
1.39
2.3
2.31
2.32
2.33
2.34
2.35
2.3600001
2.37
2.38
2.3899999
3.3
3.31
3.32
3.33
3.34
3.35
3.3600001
3.37
3.38
3.3899999
4.3
4.31
4.32
4.33
4.34
4.35
4.36
4.37
4.38
4.39
5.3
5.31
5.32
5.33
5.34
5.35
5.36
5.37
5.38
5.39
6.3
6.31
6.32
6.33
6.34
6.35
6.36
6.37
6.38
6.39
7.3
7.31
7.32
7.33
7.34
7.35
7.36
7.37
7.38
7.39
8.3
8.31
8.32
8.33
8.34
8.35
8.36
8.37
8.38
8.39
9.3
9.31
9.32
9.33
9.34
9.35
9.36
9.37
9.38
9.39
A princípio achei que essa variação fosse por causa do Sistema operacional e utilizei o método marcado como strictfp mas o resultado foi o mesmo. Também fiquei curioso por qual motivo ocorre essa variação. Espero que algum "JavaMan" possa nos esclarecer.
Exatamente…
isso não ocorre sempre isso que ta me matutando a cabeça aqui
vou falar com um pessoal aqui da minha empresa que programa com Java
se eu descobrir eu posto a resposta aqui