Respuestas:
Actualizado, en Java 8:
Math.toIntExact(value);
Respuesta original
El tipo de conversión simple debería hacerlo:
long l = 100000;
int i = (int) l;
Sin embargo, tenga en cuenta que los números grandes (generalmente más grandes 2147483647y más pequeños que -2147483648) perderán algunos de los bits y se representarán incorrectamente.
Por ejemplo, 2147483648se representaría como -2147483648.
Long x = 100L;
int y = x.intValue();
intValue()hace aquí en segundo plano es emitir el valor ... ¿Verdad?
longaquí. Es el tipo de referencia Longque no puede emitir directamente a una primitiva int. int y = (int)x;arrojará una ejecución pero int y = (int)(long)xfuncionará. (El motivo es el autoboxing)
Para valores pequeños, el casting es suficiente:
long l = 42;
int i = (int) l;
Sin embargo, un longpuede contener más información que un int, por lo que no es posible convertir perfectamente de longa int, en el caso general. Si longtiene un número menor o igual a Integer.MAX_VALUEusted, puede convertirlo lanzando sin perder ninguna información.
Por ejemplo, el siguiente código de muestra:
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 el siguiente resultado 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 xtenía un valor uno mayor que Integer.MAX_VALUE, int yno se pudo retener. En este caso se envolvió con los números negativos.
Si desea manejar este caso usted mismo, puede 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 supone números positivos. Para números negativos, use en MIN_VALUElugar de `MAX_VALUE '
Desde Java 8 puede usar: Math.toIntExact (valor largo)
Devuelve el valor del argumento largo; lanzando una excepción si el valor desborda un int.
Código fuente de Math.toIntExacten JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Si usa la biblioteca Guava , hay métodos Ints.checkedCast(long)y Ints.saturatedCast(long)para convertir longa int.
long x = 3;
int y = (int) x;
pero eso supone que longse puede representar como un int, ¿sabes la diferencia entre los dos?
Puede usar el Longcontenedor en lugar de longprimitivo y llamar
Long.intValue()
Documentos de Java7 intValue ()
Redondea / trunca el longvalor en consecuencia para que quepa en un int.
Si la transmisión directa muestra un error, puede hacerlo así:
Long id = 100;
int int_id = (int) (id % 100000);
En Java, un largo es un número de 64 bits con signo, 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).
Un int, por otro lado, es un número de 32 bits con signo, lo que significa que puede almacenar un número entre -2,147,483,648 y 2,147,483,647 (inclusive).
Entonces, si su tiempo está fuera de los valores permitidos para un int, no obtendrá una conversión valiosa.
Detalles sobre los tamaños de los tipos primitivos de Java aquí:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
En Java 8 lo hago de la siguiente manera
long l = 100L;
int i = Math.toIntExact(l);
Este método arroja ArithmaticExceptionsi el longvalor excede el rango de int. Por lo tanto, estoy a salvo de la pérdida de datos.
Si desea realizar una conversión segura y disfrutar del uso de Java8 con expresión Lambda, puede usarlo como:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =?
largo x = 3120L; // tomar cualquier valor largo int z = x.intValue (); // puedes convertir double a int también de la misma manera
si necesita encubrir directamente entonces
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
En primavera, hay una forma rigurosa de convertir un largo a int
no solo lnog se puede convertir en int, cualquier tipo de clase se extiende El número se puede convertir a otro tipo de Número en general, aquí le mostraré cómo convertir un largo a int, otro tipo viceversa.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);
