【问题标题】:Convert a long String only containing numbers into long将仅包含数字的长字符串转换为长字符串
【发布时间】:2019-11-01 15:47:18
【问题描述】:

我正在尝试将字符串(32 位)转换为长字符串,它会返回 NumberFormatException。我已经用 Long.parseLong() 和一个 Long 对象进行了尝试,但是它们的骨骼起作用了。 代码:

class ConvertStringToLong{
    public static void main(String in){
        long out;
        out=java.lang.Long.parseLong(in);
        System.out.println(out);
    }
}

我也试过了

class ConvertStringToLong{
    public static void main(String in){
        long out;
        out = new Long(in);
        System.out.println(out);
    }
}

【问题讨论】:

  • 你能告诉我们确切的输入字符串吗?听起来字符串有问题
  • 32 位数字超出了long(64 位有符号)值的范围
  • 究竟是什么不起作用?听起来你需要一个BigInteger 来做这个......
  • Max long 值是 9223372036854775807,它有 19 位数字。您要解析什么值?
  • 长最大值为 19 位。还有为什么你把你的方法命名为 main 而它不遵循 Java 的 main 方法签名main (String[] in),这很令人困惑。

标签: java string long-integer typeconverter


【解决方案1】:

long 数据类型是 64 位有符号整数,因此其最大值为 2^63 - 1,即 19 位长。要表示比这更大的数字,您将需要使用不同的数据类型,例如 BigInteger,它允许任意大的数字。构造函数new BigInteger(String val) 会将字符串解析为 BigInteger。

【讨论】:

    【解决方案2】:

    这里的文档 (https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html) 说:

    BigInteger 必须支持 -2^Integer.MAX_VALUE 范围内的值 (独占)到 +2^Integer.MAX_VALUE(独占)并且可能支持值 在那个范围之外。可能的素数范围是有限的 并且可能小于 BigInteger 的完全支持的正范围。 范围必须至少为 1 到 2^500000000。

    您可以使用 BigInteger 对象。

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 2012-09-19
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      相关资源
      最近更新 更多