【问题标题】:NumberFormatException For input String "11111000000000000000"NumberFormatException 对于输入字符串“11111000000000000000”
【发布时间】:2015-08-08 16:28:36
【问题描述】:

我在 Scala 中尝试了以下命令并获得了 NumberFormatException,但我不知道为什么。这可能是一些基本的东西,但我当然会欣赏额外的一双眼睛。非常感谢!

"11111000000000000000".toLong

java.lang.NumberFormatException:对于输入字符串: “11111000000000000000”在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在 java.lang.Long.parseLong(Long.java:592) 在 java.lang.Long.parseLong(Long.java:631) 在 scala.collection.immutable.StringLike$class.toLong(StringLike.scala:27​​6) 在 scala.collection.immutable.StringOps.toLong(StringOps.scala:30)
... 33 省略

【问题讨论】:

  • long 最大值是多少?
  • 如果您发现其中任何一个有帮助,请不要忘记选择答案。

标签: java scala


【解决方案1】:

方法

Long.parseLong(String s)

将字符串参数解析为 signed decimal long(使用 10 的基数)。 11111000000000000000,当被视为基数 10 时大于 Long 的最大值,这就是抛出 java.lang.NumberFormatException 的原因。

你正在寻找的机会

Long.parseLong("11111000000000000000", 2)

将数字视为二进制(以 2 为底)。

否则,您可能需要查看可以处理任意精度整数的java.math.BigInteger

【讨论】:

    【解决方案2】:
     9223372036854775807 // maximum value of Long
    11111000000000000000 // your value
    

    注意到什么了吗?

    【讨论】:

    • 问题可以用另一个问题来回答吗?
    • @VinceEmigh 只要它不是答案的主要部分就可以了,所以我想说在这种情况下一切都很好。
    • @VinceEmigh,显然,答案是“是”?
    • 在我看来 +AtomHeartFather 找到了一种更好的方法来清晰地回答这个问题。他甚至发现了一个潜在的误解(基数)并加以解决。
    【解决方案3】:

    64位的长距离

    –9,223,372,036,854,775,808

     9 ,223,372,036,854,775,807
    

    或使用 BigInteger 前任: 使用构造函数

    String val="111110000000000000000"
    
    BigInteger(String val)
    

    将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

    参考: BigInteger or not BigInteger?

    String to BigInteger java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多