【问题标题】:Exception in thread "main" java.lang.NumberFormatException: For input string: "3291105000"线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“3291105000”
【发布时间】:2012-06-12 17:21:52
【问题描述】:

为什么会这样?我正在解析的字符串看起来很像一个 int。该程序正在从一个文件中读取,我知道它工作得最多,因为这个数字在列表中很靠后。有任何想法吗?另外,该程序正在解析大于 22 亿的整数,所以我不知道这是否是一个大小问题。

【问题讨论】:

  • 听起来您已经知道问题出在哪里了。

标签: java exception numberformatexception


【解决方案1】:

带符号的 32 位 int 只能为 2^31 或 0x7FFFFFFF (2,147,483,647)。您需要使用更大的数据类型。 long 将让您达到 2^63。或者BigInteger 类会给你一个任意大小的整数。

【讨论】:

  • 不幸的是,Java 中没有 unsigned int 这样的东西 :(
【解决方案2】:

int 的最小值可以为-2,147,483,648,最大值为2,147,483,647(含),您的号码(来自字符串)超出范围

使用long 代替Long.parseLong(3291105000) 会为您工作

【讨论】:

    【解决方案3】:

    使用long,可以容纳64位整数。

    • ints 最多只能保存约 20 亿个整数
    • longs 最多可以容纳 ~9e18 的整数

    【讨论】:

      【解决方案4】:

      就像其他人说的那样,这个数字显然超出了 int 的范围,因此你得到了异常。

      4 字节,有符号(二进制补码)。 -2,147,483,648 至 2,147,483,647。像所有数字类型一样,int 可以转换为其他数字类型(byte、short、long、float、double)。当有损转换完成时(例如 int 到 byte),转换是以较小类型的长度为模完成的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 2014-05-27
        • 2014-06-07
        • 1970-01-01
        相关资源
        最近更新 更多