Duvida bizarra!

3 respostas
R

Estou tentando fazer um método, mas acontece um erro bizarro quando recebo o valor, vou tentar explicar melhor.

Meu programa tem um JCombobox com numeros inteiros pré-definidos que quando selecionados passam por uma verificação, nessa verificação ele é transformado em inteiro para que possa passar por uma condição, se ele passa por essa condição ele é convertido em double, pois o valor tem que ser exibido no formato “0.0” é somado a “0.3”, o método funciona, até certo ponto, por exemplo:

Valor selecionado
5
passou pela condição
sim
converte
0.5
soma a 0.3
0.8

“resultado perfeito”, é exatamente o que eu quero!!!

agora
Valor selecionado
6
passou pela condição
sim
converte
0.6
soma a 0.3
0.8999999999999999999999

Porque não “0.9” ?

isso acontece também com 11, 16, 19, 23, 24, 28, 29, 33, 34, 41
porque só com esses valores?

Alguém pode me ajudar com esta dúvida bizarra?

public void verificaDesgaste(String x)	{

temperatura = Integer.parseInt(x);		

if ((temperatura >=0)&&(temperatura<=48)){
double temp = (double) temperatura/10;
		temp = temp + 0.3;		
		setDesgaste(temp);
		
	}

3 Respostas

T

O Java faz contas em binário (e em binário é impossível representar exatamente 0.9), porque usa as instruções de processamento de ponto flutuante do processador, mas ele mostra dígitos demais, por isso é que aparece 0.[telefone removido]… em vez de 0.9.

Se fosse em C ou C++, VB ou Delphi (que apresentam apenas 6 casas depois da vírgula, por default) você nem perceberia isso, embora o valor calculado seja EXATAMENTE o mesmo.

Eu tive esse problema pela primeira vez quando aprendi Fortran na faculdade (para ver como é que sou um dinossauro), e isso nunca vai ser resolvido.

marcos.junqueira

Então apos feita a conta vc pode usar o DecimalFormat e arredondar o número… Dê uma olhada no java doc dele pra ver como funciona…

Marky.Vasconcelos

DecimalFormat dc = new DecimalFormat("##0.00"); double bizarro = 0.[telefone removido]; String numero = dc.format(bizarro); System.out.println(numero);

Criado 4 de junho de 2007
Ultima resposta 4 de jun. de 2007
Respostas 3
Participantes 4