Tente primeiro setar o tipo que está usando: Double, float etc.
Olá
Assim melhora um pouco
System.out.print( 1.2F - 1D );
Resultado: 0.20000004768371582
Eu não conheço muito bem os tipos primitivos de java, mas tenho certeza que alguém mais no fórum poderá complementar o que eu vou dizer.
Eu não tenho certeza do quanto vc conhece de representação binária de números decimais; procure no google, por exemplo [google]ponto flutuante binário[/google] ou [google]float point binary[/google]. Mas te adianto que todas as linguagens de programação tem limitações, por estarem num computador que é limitado, com memória limitada.
A idéia é mais ou menos que vc tem um número limitado de bytes para escrever o decimal, e não tem uma precisão perfeita (pensa numa calculadora, tem um número fixo de caracteres depois da vírgula, depois é arredondado). Se vc necessitar de maior precisão, use o BigDecimal ou similar, e existem parâmetros para ajustar o estilo de arredondamento.
Repito, não é bug: é limitação. E ocorre em várias linguagens.
Esse “bug” é conhecido a tempos, na verdade é um problema devido a forma como o Java trata ponto flutuante e, dependendo do que vc quer, pode atrapalhar.
Olá
[quote=thejokerbm]furutani
mas tem como eu usar isso em qualquer tipo de situacao
pq isso foi apenas um exemplo[/quote]
Dá uma lida nessa excelente explicação do thingol.
http://www.guj.com.br/posts/list/71134.java#373976
thejokerbm, eu sei que parece ilógico.
Em C, C++, Pascal, etc, sempre dá a mesma coisa. Todas as linguagens tem ESTA limitação nos pontos flutuantes, porque é o melhor custo benefício encontrado até hj. É aquele frase estúpida de “2+2 é igual a 5 para valores de 2 estupidamente grandes”.
Tente fazer experiências usando os diversos tipos, float, double, Float e Double, e vc verá que bagunça fica.
*** ehehehe o Thingol é meu IDÁLO ***
[quote=thejokerbm]peczenyj
nao tem como corrigir ou melhorar isso nuam?[/quote]
Tem, esqueça os computadores :roll:
Ou evite variáveis de ponto flutuante.
Para matemática exata não se usam pontos flutuantes. Use BigDecimal. isso não é um bug é uma característica de linguagens que implementam padrões sobre ponto flutuante.
e ai galera blz?
ou eu sou muito burro o o java tem um bug muito feio
tente fazer isso
System.out.print(1.2-1);
entao nao seria 0.2 entao pq da 0.199999999999999999999999
CintiaDR
se o problema fosse esse eu ainda entederia
mas acontece q qualquer calculadora q vc digitar 1.2 - 1 o resultado será 0.2 como em java naum pode ser
se por exemplo 10/3 eu ainda aceitaria mas 1.2 - 1 o resultado eh exato
vc entendeu minha duvida?
furutani
mas tem como eu usar isso em qualquer tipo de situacao
pq isso foi apenas um exemplo
peczenyj
nao tem como corrigir ou melhorar isso nuam?
ai galera resolvi assim
public String converte(double valor){
DecimalFormat format = (DecimalFormat) NumberFormat.getInstance();
format.applyPattern(“0.00”);
return format.format(valor);
}
llimitei meu campo em duas casas mais melhor assim
vlw galera po imagino o q passa esse pessoal q faz sistemas fisicos com 2+2=5
uahuahuhauhaua