Integer.parseInt (String str) java.lang.NumberFormatException: Errores [duplicado]
Sigo teniendo expectativas de formato de números, aunque estoy recortando las cadenas y no contienen caracteres no numéricos, curiosamente funciona para algunos números y no para otros. A continuación se muestra un ejemplo de una cadena para la que obtengo una excepción de formato numérico. Además, cualquier cadena que comience con 0, por ejemplo, "0208405223", se devuelve 208405223, ya no hay cero, ¿se supone que eso debe suceder?
String n="3020857508";
Integer a = Integer.parseInt(n.trim());
System.out.println(a);
Esta es la excepción:
Exception in thread "main" java.lang.NumberFormatException: For input string: "3020857508"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at JavaBeans.Main.main(Main.java:15)
El número más grande que se puede analizar como an int
es 2147483647
(2 31 -1), y el más grande long
es 9223372036854775807
(2 63 -1), sólo aproximadamente el doble de largo.
Para analizar números arbitrariamente largos, utilice:
import java.math.BigInteger;
BigInteger number = new BigInteger(str);
Es porque 3020857508
excede Integer.MAX_VALUE
. Deberías usar long
para convertir la cadena a número.
java> String n="3020857508";
//=> java.lang.String n = "3020857508"
java> Integer a = Integer.parseInt(n.trim());
//=> java.lang.NumberFormatException: For input string: "3020857508"
java> Integer.MAX_VALUE
//=> java.lang.Integer res2 = 2147483647
java> Long a = Long.parseLong(n.trim());
//=>java.lang.Long a = 3020857508
Lo anterior es la salida de javarepl .
Si está utilizando JDK9 o superior, puede ver el mismo resultado en jshell.
jshell> String n="3020857508"
n ==> "3020857508"
jshell> Integer a = Integer.parseInt(n.trim())
| Exception java.lang.NumberFormatException: For input string: "3020857508"
| at NumberFormatException.forInputString (NumberFormatException.java:65)
| at Integer.parseInt (Integer.java:652)
| at Integer.parseInt (Integer.java:770)
| at (#2:1)
jshell> Integer.MAX_VALUE
$3 ==> 2147483647
jshell> Long a = Long.parseLong(n.trim());
a ==> 3020857508
MAX_INT es 2147483647 y estás intentando analizar un número mayor como entero.
Puedes usar Long.parseLong
en su lugar:
System.out.println(Long.parseLong("3020857508")); // 3020857508