Conversão de Long para Double em Java

91

Existe alguma maneira de converter um Longtipo de dados em Doubleou double?

Por exemplo, preciso converter 15552451Lpara um doubletipo de dados.

atormentar
fonte

Respostas:

134

Você poderia simplesmente fazer:

double d = (double)15552451L;

Ou você pode obter o dobro do objeto Long como:

Long l = new Long(15552451L);
double d = l.doubleValue();
YoK
fonte
6
Não precisa de nenhuma análise de string lá: Long.valueOf(15552451L).doubleValue()se você quiser ir via Long. Observe que isso é o mesmo, internamente, que o elenco de a double, exceto que você está fazendo algum auto / unboxing.
Joe Kearney,
4
Eu fiz. Analisar uma string para fazer isso (agora editada da resposta) degradará o desempenho em muitas ordens de magnitude. O boxe é mais barato, mas vale a pena evitá-lo, especialmente em casos como este (uso new), onde não pode ser omitido.
Joe Kearney,
Acho que o exemplo deveria mostrar que você pode obter de Long -> double. Como o Long foi inicializado não parece tão importante ..
manhã,
1
Concedido, o exemplo na resposta parece mais razoável agora que foi editado. Afirmo que a conversão de um valor para um duplo por meio de uma String não é uma boa prática. Eu teria pensado que isso seria bastante incontroverso.
Joe Kearney,
1
Você não precisa lançar explicitamente. Simplesmente funciona:double d = 15552451L;
cutemachine
20

Elenco simples?

double d = (double)15552451L;
Jim Brissom
fonte
E se for literalmente15552451d
Jon Freedman,
2
Eu até acho que um elenco não é necessário, você pode criar um duplo com um valor longo assim: "double d = 1234L;".
crusam
Provavelmente não - mas a questão é básica o suficiente para justificar a introdução de um conceito como o casting.
Jim Brissom,
9

Como já foi mencionado, você pode simplesmente lançar long para dobrar. Mas tome cuidado com a conversão long to double porque long to double é uma conversão de estreitamento em java.

A conversão do tipo double para o tipo long requer uma tradução não trivial de um valor de ponto flutuante de 64 bits para a representação inteira de 64 bits. Dependendo do valor real do tempo de execução, as informações podem ser perdidas.

por exemplo, o programa a seguir imprimirá 1 não 0

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);
Deep
fonte
3

Você está procurando a conversão binária?

double result = Double.longBitsToDouble(15552451L);

Isso lhe dará o doublemesmo padrão de bits do longliteral.

Literais binários ou hexadecimais serão úteis aqui. Aqui estão alguns exemplos.

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);

(Consulte Double.longBitsToDouble (long) )

Você também pode pegar as longcostas com

long bits = Double.doubleToRawLongBits(Double.NaN);

(Consulte Double.doubleToRawLongBits (double) )

pvorb
fonte
Isso faz outra coisa, consulte o jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser
Sim. Mas ele não especificou como ele quer converter longpara double(acho casting é uma das primeiras coisas que você aprende ao usar Java) nem ele aceitar qualquer resposta. Talvez ele queira obter um doublecom o mesmo padrão de bits do longvalor. Bem, eu não sei. Então eu apenas dei a resposta.
pvorb
Eu adicionei informações adicionais, então a resposta é mais valiosa.
pvorb
3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

Desta forma, podemos converter o tipo Long em Double ou Float ou Int sem nenhum problema, porque é fácil converter o valor da string em Double ou Float ou Int.

Manav Patadia
fonte
2
É sempre melhor adicionar uma explicação ao código que você está postando como resposta, para que ajude os visitantes a entender por que essa é uma boa resposta.
abarisone
1

O que você quer dizer com tipo de data longa ?

Você pode lançar um longo para um duplo:

double d = (double) 15552451L;
Joe Kearney
fonte
Acho que uma data longa seria algo como "Terça-feira, 19 de setembro 24893243092333".
Teemu Leisti
0

Você pode tentar algo assim:

long x = somevalue;

double y = Double.longBitsToDouble(x);
Vikas
fonte
0

Eu acho que é bom para você.

BigDecimal.valueOf([LONG_VALUE]).doubleValue()

Que tal este código? : D

spearkkk
fonte