¿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)
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 ''
Puede usar el contenedor largo en lugar del primitivo largo y llamar a Long.intValue () http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#intValue ()
redondea / trunca el valor largo en consecuencia para que quepa en un int.
Si el casting directo muestra un error, puedes hacerlo así:
Long id = 100;
int int_id = (int) (id % 100000);
Si usa la biblioteca de Guava , hay métodos Ints.checkedCast(long)
e Ints.saturatedCast(long)
para convertir long
en int
.
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?