将 String 转换为 int return NumberFormatException

convert String to int return NumberFormatException

i 来自 API 我收到下一个字符串:

String userId = "4463570100035744";

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

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

但我仍然遇到异常....

可能是什么原因?

原因:值超出了 int 的范围

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

Integer.MAX_VALUE =  2147483647
Integer.MIN_VALUE = -2147483648

Long.MAX_VALUE =  9223372036854775807
Long.MIN_VALUE = -9223372036854775808

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

你需要这样写:

String userId = "4463570100035744";

还有一点要记住变量的大小。我认为值太大了 int.

现在你编辑了你的问题,在人们 post 回答了你的实际问题之后。

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

您可以参考 Java 基本类型的文档以 select 适合您变量的类型: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

注意你的整数是 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());
}