convertir java

¿Cómo puedo convertir un largo a int en Java?



convertir string a int php (12)

¿Cómo puedo convertir un largo a int en Java?


Desde Java 8 puede usar: Math.toIntExact (valor largo)

Ver JavaDoc: Math.toIntExact

Devuelve el valor del argumento largo; lanzar una excepción si el valor desborda un int.

Código fuente de Math.toIntExact en JDK 8:

public static int toIntExact(long value) { if ((int)value != value) { throw new ArithmeticException("integer overflow"); } return (int)value; }


En Java 8 lo hago de la siguiente manera.

long l = 100L; int i = Math.toIntExact(l);

Este método arroja ArithmaticException si el valor long excede el rango de int . Por lo tanto estoy a salvo de la pérdida de datos.


En Java, un largo es un número firmado de 64 bits, lo que significa que puede almacenar números entre -9,223,372,036,854,775,808 y 9,223,372,036,854,775,807 (inclusive).

A int, por otro lado, se le asigna un número de 32 bits, lo que significa que puede almacenar el número entre -2,147,483,648 y 2,147,483,647 (inclusive).

Por lo tanto, si su valor está fuera de los valores permitidos para un int, no obtendrá una conversión valiosa.

Detalles sobre los tamaños de los tipos de Java primitivos aquí:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


En primavera, hay una forma rigurosa de convertir un largo a int.

no solo lnog puede convertir en int, cualquier tipo de clase se extiende. Number puede convertir a otro tipo de Number en general, aquí le mostraré cómo convertir un largo en int, otro tipo viceversa.

Long l = 1234567L; int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);


Para valores pequeños, el casting es suficiente:

long l = 42; int i = (int) l;

Sin embargo, long puede contener más información que un int , por lo que no es posible convertir perfectamente de long a int , en el caso general. Si el valor long contiene un número menor o igual que Integer.MAX_VALUE , puede convertirlo mediante el lanzamiento sin perder ninguna información.

Por ejemplo, el siguiente código de ejemplo:

System.out.println( "largest long is " + Long.MAX_VALUE ); System.out.println( "largest int is " + Integer.MAX_VALUE ); long x = (long)Integer.MAX_VALUE; x++; System.out.println("long x=" + x); int y = (int) x; System.out.println("int y=" + y);

produce la siguiente salida en mi máquina:

largest long is 9223372036854775807 largest int is 2147483647 long x=2147483648 int y=-2147483648

Observe el signo negativo en y . Debido a que x mantuvo un valor uno mayor que Integer.MAX_VALUE, int y no pudo mantenerlo. En este caso se envolvió a los números negativos.

Si quisiera manejar este caso usted mismo, podría hacer algo como:

if ( x > (long)Integer.MAX_VALUE ) { // x is too big to convert, throw an exception or something useful } else { y = (int)x; }

Todo esto asume números positivos. Para números negativos, use MIN_VALUE lugar de `MAX_VALUE ''



Si el casting directo muestra un error, puedes hacerlo así:

Long id = 100; int int_id = (int) (id % 100000);



Actualizado, en Java 8:

Math.toIntExact(value);

Respuesta original:

Tipo de fundición simple debe hacerlo:

long l = 100000; int i = (int) l;

Sin embargo, -2147483648 cuenta que los números grandes (generalmente mayores que 2147483647 y menores que -2147483648 ) perderán algunos de los bits y se representarían incorrectamente.

Por ejemplo, 2147483648 se representaría como -2147483648 .


Long l = 100; int i = Math.round(l);


Long x = 100L; int y = x.intValue();


long x = 3; int y = (int) x;

pero eso supone que el long puede representarse como un int , ¿sabes la diferencia entre los dos?