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!