将String转换为int返回NumberFormatException

时间:2015-09-17 14:42:27

标签: android exception numberformatexception valueconverter

我从API接收下一个字符串:

String userId = "4463570100035744";

我需要将它转换为int,所以我尝试了下一个代码:

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

但我仍然抓住了例外......

可能是什么原因?

4 个答案:

答案 0 :(得分:5)

原因:值超出了int的范围

操作:您必须使用Long而不是Integer。请使用long / Long。

Integer.MAX_VALUE =  2147483647
Integer.MIN_VALUE = -2147483648

Long.MAX_VALUE =  9223372036854775807
Long.MIN_VALUE = -9223372036854775808

答案 1 :(得分:0)

将变量userId作为String并将整数值放入其中然后解析它以整数转换。你的错误是你把整数值放在字符串变量userId中。

你需要这样说:

String userId = "4463570100035744";

还要记住变量的大小。我认为价值太大而不是int的大小。

现在,在人们发布您实际问题的答案后,您就编辑了自己的问题。

答案 2 :(得分:0)

4463570100035744对于Int32变量来说太大了。您可以考虑使用long变量类型。

答案 3 :(得分:0)

您可以参考Java基元类型的文档来为变量选择合适的类型:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

可用于存储像userId这样的数字的基元类型是:

  • byte(1字节)
    范围:-128到127
  • short(2字节)
    范围:-32768至32767
  • int(4字节)
    范围:-2,147,483,648至2,147,483,647
  • float(4字节)
    范围:3.4e-038至3.4e + 038
  • long(8字节)
    范围:9,223,372,036,854,775,808至9,223,372,036,854,755,807
  • double(8字节)
    范围:1.7e-308至1.7e + 038

注意你的int 4463570100035744int的比较差异为4,463,567,952,552,097。

您的ID变量最适合long

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