Conversión de largo a doble en Java

93

¿Hay alguna forma de convertir un Longtipo de datos en Doubleo double?

Por ejemplo, necesito convertir 15552451La un doubletipo de datos.

Harry
fuente

Respuestas:

137

Simplemente podrías hacer:

double d = (double)15552451L;

O puede obtener el doble del objeto Long como:

Long l = new Long(15552451L);
double d = l.doubleValue();
YoK
fuente
6
No necesita ningún análisis de cadenas allí: Long.valueOf(15552451L).doubleValue()si desea pasar Long. Tenga en cuenta que esto es lo mismo, internamente, que el elenco de a double, excepto que está haciendo algo de auto / unboxing.
Joe Kearney
4
Yo hice. Analizar una cadena para hacer esto (ahora editado de la respuesta) degradará el rendimiento en muchos órdenes de magnitud. El boxeo es menos costoso pero vale la pena evitarlo, especialmente en casos como este (uso new) donde no se puede eludir.
Joe Kearney
Creo que se suponía que el ejemplo mostraría que puedes obtener de Long -> double. La forma en que se inicializó Long no parece tan importante ..
ams
1
Concedido, el ejemplo en la respuesta parece más razonable ahora que ha sido editado. Sostengo que la conversión de un valor a un doble a través de una cadena no es una buena práctica. Yo hubiera pensado que eso era bastante poco controvertido.
Joe Kearney
1
No es necesario enviar contenido explícitamente. Simplemente funciona:double d = 15552451L;
cutemachine
20

Casting simple?

double d = (double)15552451L;
Jim Brissom
fuente
Y si es un literal justo15552451d
Jon Freedman
2
Incluso creo que no es necesario un molde, puedes crear un doble con un valor largo como este: "doble d = 1234L;".
crusam
Probablemente no, pero la pregunta es lo suficientemente básica como para justificar la introducción de un concepto como el casting.
Jim Brissom
9

Como ya se mencionó, simplemente puede lanzar largo para duplicar. Pero tenga cuidado con la conversión de largo a doble porque de largo a doble es una conversión estrecha en java.

La conversión de tipo doble a tipo largo requiere una traducción no trivial de un valor de punto flotante de 64 bits a la representación entera de 64 bits. Dependiendo del valor real del tiempo de ejecución, es posible que se pierda información.

por ejemplo, el siguiente programa imprimirá 1, no 0

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);
Profundo
fuente
4

¿Está buscando la conversión binaria?

double result = Double.longBitsToDouble(15552451L);

Esto le dará doubleel mismo patrón de bits que el longliteral.

Los literales binarios o hexadecimales serán útiles aquí. Aquí hay unos ejemplos.

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

(Ver Double.longBitsToDouble (long) )

También puedes recuperar la longespalda con

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

(Ver Double.doubleToRawLongBits (doble) )

pvorb
fuente
Esto hace algo más, consulte el jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser
Si. Sin embargo, no especificó la forma que quiere convertir longa double(creo casting es una de las primeras cosas que se aprenden cuando se utiliza Java) ni tampoco aceptar ninguna respuesta. Tal vez quiera obtener una doublecon el mismo patrón de bits que el longvalor. Bueno, no lo se. Así que solo di la respuesta.
pvorb
Agregué información adicional, por lo que la respuesta es más valiosa.
pvorb
3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

De esta manera podemos convertir el tipo Long a Double o Float o Int sin ningún problema porque es fácil convertir el valor de la cadena en Double o Float o Int.

Manav Patadia
fuente
2
Siempre es mejor agregar una explicación al código que está publicando como respuesta, para que ayude a los visitantes a comprender por qué esta es una buena respuesta.
abarisone
1

¿Qué quieres decir con un tipo de cita larga ?

Puedes lanzar un largo a un doble:

double d = (double) 15552451L;
Joe Kearney
fuente
Supongo que una cita larga sería algo así como "Martes 19 de septiembre 24893243092333".
Teemu Leisti
1

Puedes probar algo como esto:

long x = somevalue;

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

Creo que es bueno para ti.

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

¿Qué tal este código? :RE

Spearkkk
fuente