【问题标题】:Dealing with numbers that are too large for int in Java [duplicate]在 Java 中处理对于 int 来说太大的数字 [重复]
【发布时间】:2016-08-08 21:16:10
【问题描述】:

所以我试图解析一个包含对于 Int 存储来说太大的数字的字符串。但我需要字符串的值,因为我正在划分它。我可以将字符串解析成 Long 吗?

n = Long.parseLong(string);

喜欢吗?或者有没有一种方法可以将字符串除以一个数字,而不必将字符串变成一个数字?我使用的代码是这样的:

private static String getFinished(String x, int y){
    int word = Integer.parseInt(x);
    word = word/y;

我使用的号码是:1980715126555015951540148577071512651650 但我可能会使用更长时间的数字。

【问题讨论】:

  • 如果数字小于或等于 2^63 - 1,那么您可以使用long。如果大于,请使用BigInteger。更重要的是,自己尝试一下,如果您遇到一个真实的例子,请告诉我们。
  • 支持...因为我花了足够长的时间才找到解决方案(甚至已经知道),我明白你为什么需要发布这个问题。

标签: java parsing


【解决方案1】:

不,你不能在不将字符串解析为数字的情况下对其进行分割。

并且long num = Long.parseLong(str); 是 100% 合法的,前提是您使用 try/catch 块包装它或从方法中抛出异常。

编辑: 根据您添加的示例字符串,long 可能不再为您提供帮助。检查BigInteger

【讨论】:

  • 当然不用解析成数字也可以分割字符串。这很麻烦,但你可以像在纸上一样做。
  • 哦,是的。但是 bigdecimal 会在内部为您提供所有这些。为什么要重新发明轮子?
  • 我同意,这里正确的选择是使用BigInteger,但我只是在简化您在第一段中所做的声明。错了。
  • 你是对的。在c 的日子里,我确实编写了 BigInteger 类型的实现。 :)
【解决方案2】:

您要查找的课程是BigInteger。或者 BigDecimal 用于浮动。

【讨论】:

    【解决方案3】:

    我可以将字符串解析成 Long 吗?

    是的。前提是数量不是很大。多头/多头的范围是 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807。

    另一种选择是使用BigInteger (javadoc)。它可以处理更大的数字。 (BigInteger 的上限很可能取决于您可用的内存量。)

    我使用的号码是:1980715126555015951540148577071512651650

    这需要一个 BigInteger。示例:

    BigInteger small = new BigInteger("1980715126555015951540148577071512651650");
    BigInteger notQuiteSoSmall = small.add(BigInteger.ONE);
    

    注意事项:

    1. BigInteger 没有运算符重载。您必须使用显式方法调用。
    2. BigInteger 对象类似于 String 对象;即它们是不可变的。算术方法产生一个新的BigInteger 对象。

    【讨论】:

    • 我可以像使用 Int 数据类型一样使用 BigInteger 吗?
    • @TheTwistyTie No. intlong 是原语,可以直接使用。 BigInteger 是一个不可变 对象,所以你必须调用方法来执行计算。例如。对于int,你可以说i = i + 5,但对于BigInteger,你必须说bi = bi.add(BigInteger.valueOf(5))
    • 没有。您必须使用方法调用来进行算术运算。算术运算符没有重载。
    • 那么从将字符串解析为 BigInteger 的角度来看,这会如何?
    • @TheTwistyTie 查看 javadoc。 StephenC 在答案中为您提供了链接。有一个可以使用的构造函数。
    猜你喜欢
    • 2021-06-02
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2020-11-10
    • 2011-07-29
    • 2016-06-04
    相关资源
    最近更新 更多