代码之家  ›  专栏  ›  技术社区  ›  Michael Dickens

爪哇/ Scala BigInteger Pasting

  •  9
  • Michael Dickens  · 技术社区  · 15 年前

    我对Java BigType类有一个问题:我不能把大的值粘贴到BigType中。例如,假设我想给这个数字分配一个biginteger:

    265252859812191058636308482795

    我不能直接赋值,因为编译器认为它是一个整数:

    val bi = 26525285981219105863630848482795 //compile error
    

    但我希望它是一个 BigInteger . 是否有任何方法可以直接将其粘贴到源代码中?如果没有这样的方法,那么scala中有没有一种方法,它更容易使用 BigInt 班级?谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  17
  •   Community CDub    7 年前

    特伦斯 answer 从Java的角度来看是正确的,但是在斯卡拉你可以做更多的事情。 scala.BigInt 比你能做的要多 java.math.BigInteger S.

    例如:

    scala> val a = new BigInteger("26525285981219105863630848482795");
    a: java.math.BigInteger = 26525285981219105863630848482795
    
    scala> a + a
    :7: error: type mismatch;
    found   : java.math.BigInteger
    required: String
           a + a

    scala中实例化类的标准方法是使用位于 companion object . 当您在scala中编写foo(args)时,这会被转换为foo.apply(args),其中foo是一个单例对象——伴生对象。所以要找到建造的方法 BigInt 你可以看看 大整数 scala库中的对象,尤其是 apply 构建。

    因此,构建 大人物 是:通过它 Int ,A Long 或者 String 解析。例子:

    scala> val x = BigInt(12)
    x: BigInt = 12
    
    scala> val y = BigInt(12331453151315353L)
    y: BigInt = 12331453151315353
    
    scala> val z = BigInt("12124120474210912741099712094127124112432")
    z: BigInt = 12124120474210912741099712094127124112432
    
    scala> x + y * z
    res1: BigInt = 149508023628635151923723925873960750738836935643459768508
    

    请注意,您可以使用 大整数 ,这是不可能的 BigInteger !

        2
  •  5
  •   rtperson    15 年前

    这应该有效:

    BigInteger bigInt = new BigInteger("26525285981219105863630848482795");
    

    BigInteger读取字符串并将其解析为正确的数字。因此,您需要检查java.text.numberFormat。