[Logo] PortalJava
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Hottest Topics] Tópicos Quentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Moderation Log] Log de moderação  
Duvida sobre precisão  XML
Índice dos Fóruns » Java Básico (Iniciantes)
Autor Mensagem
clovandi
Java Baby

Membro desde: 30/09/2008 12:32:55
Mensagens: 2
Offline

Gostaria de entender melhor porque acontece o que sugere o código abaixo:

double X = 0 + 2 + 2.69;//4,6899999999999995

e em outros casos

double X = 0 + 2 + 2.51;//4,51

Afinal, ele não faz a conta e pronto????

Obrigado....
SrFabio
EJB = JavaBean?

Membro desde: 18/02/2007 00:00:00
Mensagens: 236
Offline

Esses erros de precisão devem-se ao facto de estares a fazer uma operação com dois tipos de dados diferentes, contudo não se deve só a isso, trata-se também de falta de precisão por parte da JVM.
marcossousa
The EJB says "Hello World!"
[Avatar]
Membro desde: 14/01/2004 00:00:00
Mensagens: 1833
Localização: Patos de Minas - MG
Offline

Olá,

SrFabio wrote:Esses erros de precisão devem-se ao facto de estares a fazer uma operação com dois tipos de dados diferentes, contudo não se deve só a isso, trata-se também de falta de precisão por parte da JVM.


complementando veja este tópico http://www.portaljava.com/forum/posts/list/45087.page#165812, BigDecimal é a maneira mais segura de realizar estas operações.

[WWW]
Juliano Carniel
Coordenador

Membro desde: 25/09/2003 00:00:00
Mensagens: 1894
Localização: Campinas - SP
Offline

É um problema comum em sistemas binários. E como todos* os sistemas que conhecemos, e temos hoje são binários, então é um problema bem comum.

Existem pela internet uns papers bem interessantes sobre representação decimal em sistemas binários, e coisas relacionadas.

Abraços.

Juliano D. Carniel
Por uma vida Justa e uma morte Honrada!
Nonsenses... it´s life!
[WWW]
ninarm
Java Baby

Membro desde: 24/09/2008 09:55:40
Mensagens: 4
Offline

Clovandi,
O negócio é usar bigdecimal mesmo:
BigDecimal x = new BigDecimal(0+2+2.69,MathContext.DECIMAL32).setScale(2);//4,69
System.out.println(x);
out:
4.69
Fonte: http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html
[]'s
clovandi
Java Baby

Membro desde: 30/09/2008 12:32:55
Mensagens: 2
Offline

Valeu pessoal pela explicação, andei pesquisando e a coisa é bastante complexa mesmo.... na dúvida vou usar o bigDecimal mesmo

Obrigado

Clovandi.
 
Índice dos Fóruns » Java Básico (Iniciantes)
Ir para:   
Powered by JForum 2.1.8 © JForum Team