Necessito da precisão do float 1.1f [RESOLVIDO]

3 respostas
Z

Tudo bem pessoal.
Estou com um problema de precisão com o float e double procurei bastante em alguns forum, mas n achei nada relacionado.
Sempre que acho alguma coisa é usando:

  • System.out.format(format, args);
  • NumberFormat
  • BigDecimal
    e priciso passar um float para o metodo.

Executando o codigo abaixo:

public class TestFloat {

public static void main(String[] args) {

for (float i = 0; i < 2.0f; i+=0.1) {

System.out.println(i);

}

}

}

Resultado é:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
1.0000001
1.1000001
1.2000002
1.3000002
1.4000002
1.5000002
1.6000003
1.7000003
1.8000003
1.9000003

mas eu so posso passar pro metodo um float um numero depois “.” , ou seja, 0.1, 0.2 … 0.9 não pode ser 0.123, 0.36. Teria alguma maneira de fazer isso sem usar “System.out.format(format, args), NumberFormat, BigDecimal e try/catch para converter String em float”.

Outra pergunta por que isso acontece com a soma de i no loop for acima se eu somo o resultado de:
float i = 0.6, y 0.1;
i += y é igual 0.70000005
i += y é igual 0.8000001

qual o problema com a precisao do float?

3 Respostas

T

a) Dentro da medida do possível, não use float, use double
b) http://docs.sun.com/source/806-3568/ncg_goldberg.html
c) Seu loop deveria ser escrito assim:

public class TestFloat {
    public static void main(String[] args) {
        for (int i = 0; i < 20; ++i) {
             double d = i / 10.0;
             System.out.printf ("%.6f %n", d);
        }
    }
}
Z

Muito obrigado pela ajuda thingol nunca pensei que seria tão rapido rsrsrs, estou lendo o artigo que vc me indicou.
Fiquei procurando um tempão mas n consegui achar um botão/funcionalidade para encerrar essa duvida. como eu faço pra encerrar esse topico?

Andre_Fonseca

ZeroLelouch:
Muito obrigado pela ajuda thingol nunca pensei que seria tão rapido rsrsrs, estou lendo o artigo que vc me indicou.
Fiquei procurando um tempão mas n consegui achar um botão/funcionalidade para encerrar essa duvida. como eu faço pra encerrar esse topico?

é só colocar [RESOLVIDO] no título do tópico

Criado 27 de setembro de 2009
Ultima resposta 27 de set. de 2009
Respostas 3
Participantes 3