Duvida na soma de floats

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

  1. Não use float para fazer contas no dia-a-dia; use sempre double, ou long, ou BigDecimal.
    Só use float se souber exatamente o que está fazendo.
  2. What Every Computer Scientist Should Know About Floating-Point Arithmetic