Problemas com conversação Long para Double [RESOLVIDO]

4 respostas
L

To precisando dividir um Long e pegar os decimais em um Double.

import java.util.ArrayList;
import java.util.List;

public class TestConvert {
	
	public static List<Double> gerarNumeros(){
		List<Double> lista=new ArrayList<Double>();
		long n;
		Long a=1L;
		Double num;
		
		for(n=0;n<10000;n++){
			a=((16807L*a)%2147483647L);

			num=(a/[telefone removido]);

			lista.add(num);

		}
		return lista;
	}
}

Estou tentando como o mostrado a cima!! Alguem tem alguma idéia!

4 Respostas

L

fiz um teste:

Long a = 1043618065L;
final Double num = Double.valueOf((a / 2147483647L));
System.out.println(num);

retorna 0.0 e deveria retornar 0.48597253183181049853181955336212

O que errei?

E

A divisão de 2 longs dá um long.

Pode ser que essa divisão seja algo do tipo 1 / 3 (ou seja, dá o valor 0, com resto 1). Não existe um long cujo valor seja 0.3333333333333… - isso é o valor de um double.

Portanto, para você pegar o valor desejado, provavelmente terá de transformar um dos longs em um double, e fazer a divisão, cujo resultado será um double também.

Se você já mexeu com VB, a divisão do Java é igual a esta divisão inteira do VB (que usa um símbolo “” em vez de “/”).

Se você já mexeu com Delphi (Pascal), a divisão do Java é igual à divisão inteira do Pascal (que usa a palavra “div”.)

Para a divisão do Java funcionar igual à divisão do VB ou do Delphi você precisa que pelo menos um dos lados seja um double.

L

Exato, muito obrigado pela ajuda!!!

Long a = 1043618065L;
		Double aux = Double.valueOf(a);
		final Double num = Double.valueOf((aux / [telefone removido]));
		System.out.println(num);
bachiega

Fala ae blz?

Então pode ser feito assim:

for(n=0;n<10000;n++){  
             a=((16807L*a)%2147483647L);  
   
             a=(a/[telefone removido]);  

             // aqui a conversão para Double
             final Double b = Double.valueOf(a);
   
             lista.add(num);  
   
         }

Falou!

Criado 10 de dezembro de 2010
Ultima resposta 10 de dez. de 2010
Respostas 4
Participantes 3