2015-09-17 2 views
0

i de l'API que je reçois chaîne suivante:convertir la chaîne int retour NumberFormatException

String userId = "4463570100035744"; 

je dois le convertir en int, donc j'ai essayé le code suivant:

try { 
    int id = Integer.parseInt(userId); 
} catch (NumberFormatException e){ 
    e.printStackTrace(); 
} 

mais je prends toujours exeption ....

quelle peut être la raison?

+0

try Integer.parseInt (IDutilisateur.trim()); – VVJ

Répondre

5

RAISON: la valeur est en dehors de la plage d'un int

ACTION: Vous devez utiliser longue et non entier .Utilisation une longue/Long à la place.

Integer.MAX_VALUE = 2147483647 
Integer.MIN_VALUE = -2147483648 

Long.MAX_VALUE = 9223372036854775807 
Long.MIN_VALUE = -9223372036854775808 
0

vous prenez la variable userId sous forme de chaîne et vous mettre en valeur entière et vous Parse pour convertir en entier. Votre erreur est que vous mettez la valeur entière dans la variable de chaîne userId.

Vous devez le mettre comme ceci:

String userId = "4463570100035744"; 

Une chose à garder la taille de la variable à l'esprit. Je pense que la valeur est trop grande, alors la taille de int.

Et maintenant vous avez édité votre question, après que les gens postent des réponses à votre problème réel.

0

4463570100035744 est un nombre trop grand pour une variable Int32. Vous pouvez envisager d'utiliser un type de variable long.

+0

oups Devedra peut m'avoir battu là-bas .... – BadBearOntour

0

Vous pouvez consulter la documentation pour les types primitifs Java pour sélectionner le type approprié pour votre variable: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Les types primitifs disponibles pour stocker un numéro comme votre userId sont:

  • byte (1 octet)
    Plage: -128 à 127
  • short (2 bytes)
    Range: -32768 à 32767
  • int (4 octets)
    Range: -2147483648 à 2147483647
  • float
  • (4 octets)
    Range: 3.4e-038 à 3.4e + 038
  • long (8 octets)
    Range: 9.223.372.036.854.775.808 à 9.223.372.036.854.755.807
  • double (8 octets)
    Gamme: 1.7e-308 à 1.7E + 038

Remarquez comment votre int est 4463570100035744 qui par rapport à int a une différence de 4.463.567.952.552.097.

Votre variable id serait mieux adaptée pour un long.

try 
{ 
    long id = Long.parseLong(userId); 
    System.out.println("long id = " + id); 
} 
catch (NumberFormatException nfe) 
{ 
    System.out.println("NumberFormatException: " + nfe.getMessage()); 
}