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

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/2147483647);

			lista.add(num);

		}
		return lista;
	}
}

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

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?

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.

Exato, muito obrigado pela ajuda!!!

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

Fala ae blz?

Então pode ser feito assim:

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

         a=(a/2147483647);  

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

         lista.add(num);  

     }  [/code]

Falou!