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.

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();

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;

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

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) )


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.


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;

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

0

Creo que es bueno para ti.

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

¿Qué tal este código? :RE

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.