¿Cómo puedo convertir un largo a int en Java?¿Cómo puedo convertir un largo a int en Java?
Respuesta
long x = 3;
int y = (int) x;
pero eso supone que el long
se puede representar como un int
, que saben la diferencia entre los dos?
Es interesante saber que de acuerdo con el par 5.1.3 en http://java.sun.com /docs/books/jls/third_edition/html/conversions.html#189955 (Lan de Java Especificación guage): a pesar del hecho de que puede haber desbordamiento, desbordamiento u otra pérdida de información, el estrechamiento de las conversiones entre tipos primitivos nunca da como resultado una excepción de tiempo de ejecución (§11). – extraneon
simple conversión de tipos debería hacerlo:
long l = 100000;
int i = (int) l;
Nótese, sin embargo, que un gran número (por lo general más grandes que 2147483647
y más pequeño que -2147483648
) perderán algunos de los bits y estarían representados de forma incorrecta.
Por ejemplo, 2147483648
se representaría como -2147483648
.
Para valores pequeños, la fundición es suficiente:
long l = 42;
int i = (int) l;
Sin embargo, un long
puede contener más información que un int
, por lo que no es posible convertir perfectamente desde long
a int
, en el caso general. Si el long
tiene un número menor o igual a Integer.MAX_VALUE
, puede convertirlo por conversión 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 el siguiente resultado en mi máquina:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
Aviso el signo negativo en y
. Como x
tenía un valor uno mayor que Integer.MAX_VALUE, int y
no pudo contenerlo. En este caso, se ajusta a los números negativos.
Si quería manejar este caso a sí mismo, es posible 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 que números positivos. Para números negativos, usar MIN_VALUE
en lugar de `MAX_VALUE'
Por lo tanto, una conversión adecuada será detectar si la conversión es segura y lanzar una excepción en caso contrario. Hecho declarado por @Andrej Herich que sugirió la biblioteca Guava. – raisercostin
En Java, una larga es un número con signo 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 (ambos inclusive).
Un int, por otro lado, tiene 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).
Por lo tanto, si su longitud está fuera de los valores permitidos para una int, no obtendrá una conversión valiosa.
detalles sobre el tamaño de los tipos primitivos de Java aquí:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
¿Por qué el voto a favor? –
La pregunta ya estaba respondida en el momento en que la vi, pero no se explicó el tema de los límites de la conversión. Que hice entonces. Si piensas que es "bla bla bla", eso solo significa que eres una especie de genio que puede prescindir de ese tipo de cosas, pero para nosotros, simples humanos, una explicación puede ser útil.Gracias por su "entrada" ... –
Usted puede utilizar el contenedor largo en lugar de a largo primitiva y llamada de larga.intValue() http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#intValue()
redondea/trunca el valor largo para que quepa en un int.
Puede ser una buena idea enlazar a la documentación actual, así como expandir esto; inevitablemente, habrá algún grado de redondeo al convertir un largo a un int. – Makoto
@Makoto tienes razón, no me di cuenta. Está udpatado. – eleonzx
Observando la implementación de Java 7 de Long.intValue(), solo está lanzando. No se implementa ninguna verificación de sub/desbordamiento. Así que al menos a través de Java 7, esta opción es equivalente a solo: (int) someLong. – buzz3791
Si se utiliza Guava library, hay métodos Ints.checkedCast(long)
y Ints.saturatedCast(long)
para convertir long
a int
.
No es necesario utilizar las bibliotecas – Grekz
@Grekz que depende del OP. Yo lo haría en este caso. Más jarras de dependencia son mejores que las más reinventadas a menos que tengas una razón real para no tener más jarras de dependencia. – djechlin
En mi humilde opinión, esta respuesta es mucho mejor que la aceptada, ya que nunca hace algo inesperado. –
En primavera, hay una manera rigurosa para convertir un largo a int
no sólo lnog se pueden convertir en int, cualquier tipo de clase extiende Número puede convertir a otro tipo Número, en general, aquí te mostraré cómo convertir un largo a int, otro tipo viceversa.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);
Spring puede ser Java, pero Java no es Spring. "En java, there is" es una declaración falsa. – Grod
Long l = 100;
int i = Math.round(l);
Desde Java 8 puede utilizar: Math.toIntExact (valor de largo)
Devuelve el valor del argumento largo; lanzando una excepción si el valor se desborda un int.
El código fuente de Math.toIntExact
en el JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Si colada directa muestra de error puede hacerlo de esta manera:
Long id = 100;
int int_id = (int) (id % 100000);
- 1. En Kotlin ¿Cómo puedo convertir un int? a un Int
- 2. Java: convertir largo a Timestamp
- 3. Convertir un largo a dos int para fines de reconstrucción
- 4. Cómo convertir flotador a int en Java
- 5. Cómo convertir int * a int
- 6. Java: charAt convertir a int?
- 7. ¿Puedo convertir long a int?
- 8. Java: resultado a largo = -1: no se puede convertir de int a long
- 9. ¿Cómo puedo convertir un int a un CString?
- 10. ¿Cómo convertir un Enum a un int?
- 11. Cómo convertir long a int en .net?
- 12. Cómo convertir entero a int?
- 13. Cómo convertir int [] a byte []
- 14. ¿Cómo puedo convertir un int a una matriz de bool?
- 15. ¿Cómo convierto un byte a un largo en Java?
- 16. Cómo convertir un NSInteger a un int?
- 17. largo largo vs int multiplicación
- 18. C++ int frente a largo
- 19. Cómo convertir un int a una cadena?
- 20. Java convertir int a hexadecimal y viceversa
- 21. Cómo convertir un valor int a cadena en Go?
- 22. ¿Cómo puedo convertir BitArray en single int?
- 23. Cómo convertir NUM a INT en R?
- 24. ¿Convertir int a cadena?
- 25. Cómo convertir a entero int
- 26. Convertir iterador a int
- 27. Cómo convertir float a int en smarty
- 28. Conversión de largo a doble en Java
- 29. Cómo convertir int a QString?
- 30. Cómo convertir largo sin signo a cadena
duplicado posible de [seguridad de fundición larga a int en Java ] (http://stackoverflow.com/questions/1590831/safely-casting-long-to-int-in-java) –