Lindomar,

A representação de números de ponto flutuante (float, double, etc...) na computação
se deve a representação binária.  Como a representação na computação digital (veja DIGITAL,
pois na computação ANALÓGICA("eca pré-histórico") consegue-se aproximações na precisão que se
desejar...) é finita, então um número tem que ter um número finito de bits que o representa.

Se um número inteiro vc representa como uma porção de 0's e 1's que na verdade siginifica
uma expressão do tipo:
1010(binário), representa:
1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 10(decimal)

digamos que, a sequencia abaixo seja interpretado como um
float (note, isso é um exemplo, existe um padrão para essa representação):
1010(binário), representa:
1*2^-3 + 0*2^-2 + 1*2^-1 + 0*2^0 = .625

Portanto, se fosse for seguir o meu exemplo de codificação de float, você
não consegue representar .6, apenas uma aproximação para ele.
É a mesma coisa que acontece no seu caso.  Talvez 23.6 em float seja uma aproximação e,
quando você aumenta a precisão, aparece uma aproximação mais exata.

Espero ter ajudado,

--
Nilo Garcia Silveira
Estagiário

Visual Systems Informatica Ltda.
Oracle Partner Program
http://www.visualsystems.com.br
Tel: (17) 2124425 R. 31
 

Lindomar Silva wrote:

Pessoal, mandei a pouco tempo um e-mail perguntando como resolvia a quele proble de multiplicar um double por um int, bom isto já está ok, dei uma olhada na classe NumberFormat e creio que agora esteja ok.Entretanto analisei o seguinte código: Float f1=new Float(23.26);System.out.println(f1.doubleValue()); -> o resultado aqui é 23.260000228881836 Por que nesta transformação aparecem 228881836?Não era para ser tudo zero?Será que na declaração do objeto do tipo Float, o 23.26 não é EXATAMENTE 23.26?     
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.338 / Virus Database: 189 - Release Date: 03/14/2002

Responder a