【问题标题】:java.lang.NumberFormatException is thrown for the string "008949679851"为字符串“008949679851”引发 java.lang.NumberFormatException
【发布时间】:2018-05-16 07:59:49
【问题描述】:

下面的代码throws NumberFormatException我不明白为什么,

String sku = "008949679851";
System.out.println(Integer.valueOf(sku));

有趣的是,如果我删除前三位数字并将输入字符串保留为“949679851”,则不会引发此异常。将字符串转换为整数值时是否有长度限制..?我怎样才能使它与完整的字符串一起工作..?

【问题讨论】:

  • 除了要大的数字:还要记住,字面量中的 0 前缀意味着:八进制数字。因此,取决于您想要做什么(或者您期望该数字是什么,最好先删除那些 0)。
  • 我一定会记住这一点 :)
  • valueOf(String)(没有可选的第二个 radix 参数)总是以 10 为基数(javadoc)进行解析,无论前导零如何。所以它并没有因为非八进制数字 8 和 9 而失败,只是这个数字对于 Integer 来说太大了。

标签: java string integer


【解决方案1】:

因为 Integer 的最大值为 Integer.MAX_VALUE = 2147483647,而您的数字大于此 8949679851。而是使用 Long.valueOf(sku)BigInteger 例如:

Long l = Long.valueOf(sku);//Max value equal to 9223372036854775807

BigInteger b = new BigInteger(sku);

【讨论】:

  • 我认为凯文安德森通过他对问题本身的评论澄清了这一点。
【解决方案2】:

在 Java 中,int 和 Integers 的最大值为 2^31-1 (2147483647),因此您的数字超过了该值。

【讨论】:

  • 谢谢...!!!我现在明白了,我正在相应地处理它以满足我的需要:)。
【解决方案3】:

Java 整数大小为 32 位(范围 -2,147,483,648 到 +2,147,483,647)。 "008949679851" 太长,而"949,679,851" 在范围内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多