¿Cuál es la mejor manera de convertir un doble en un largo sin lanzar?
Por ejemplo:
double d = 394.000;
long l = (new Double(d)).longValue();
System.out.println("double=" + d + ", long=" + l);
java
type-conversion
Trineo
fuente
fuente
myLong == (long)(myDouble + 1)
wheremyLong
equalsmyDouble
se evaluarán paratrue
Double.longValue();
) sigue siendo útil si tiene valores dobles de cosas como una lista de matrices como esta,ArrayList<Double>
ya que obtendrá un error de no se puede emitir. Solo digo esto para cualquiera que haya venido y haya tenido un problema ligeramente diferente.Respuestas:
Asumiendo que estás contento con truncar hacia cero, solo lanza:
Esto será más rápido que ir a través de las clases de contenedor y, lo que es más importante, es más legible. Ahora, si necesita un redondeo diferente a "siempre hacia cero", necesitará un código un poco más complicado.
fuente
... Y aquí está el redondeo que no se trunca. Se apresuró a buscarlo en el Manual API de Java:
fuente
El enfoque preferido debería ser:
De la documentación de Double (Java Platform SE 7) :
fuente
(new Double(d)).longValue()
internamente solo realiza un lanzamiento, por lo que no hay razón para crear un objeto Doble.fuente
La biblioteca Guava Math tiene un método especialmente diseñado para convertir un doble en uno largo:
Puede usar
java.math.RoundingMode
para especificar el comportamiento de redondeo.fuente
Si tiene una fuerte sospecha de que el DOBLE es en realidad un LARGO, y desea
1) maneje su valor EXACTO como LARGO
2) arroja un error cuando no es LARGO
puedes probar algo como esto:
Long es un subconjunto de Double, por lo que puede obtener algunos resultados extraños si, sin saberlo, intenta convertir un Double que esté fuera del rango de Long:
fuente
Long is a subset of Double
No es exacto. El número de dígitos significativos para Long es mayor que Double, por lo que parte de la información que posee Long se puede perder cuando se convierte en Double. Ejemplo = tio.run/…¿Quieres tener una conversión binaria como
fuente
Simplemente por lo siguiente:
fuente
En pocas palabras, la conversión es más eficiente que crear un objeto Doble.
fuente