2012-04-03 13 views
6

Estoy utilizando Math.round y estoy descubriendo que no me devolverá ningún valor mayor que (2^32/2) -1, pero la documentación indica que puede/devolverá valores largos, es decir, 2^64 ... Aquí hay un fragmento de código.Math.round MAX valor retornable

long bTmp = (long)Math.round(4294967296L); 
System.out.println(bTmp); 
System.out.println(Long.MAX_VALUE); 

qué salida:

2147483647 
9223372036854775807 

Me estoy perdiendo algo?

Respuesta

11

Está llamando a la sobrecarga de Math.round() que toma un float y devuelve un int. Ver the javadoc.

Probar:

Math.round((double) 4294967296L) 
+2

sólo para añadir algo de información sobre lo que se hace: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls- 5.1.2 Por defecto hay una ampliación de largo a flotante. Para aplicar el comportamiento con el doble, debe ser lanzado. –