11

我对 Java 类有一个问题BigInteger:我无法将大值粘贴到BigInteger. 例如,假设我想为BigInteger这个号码分配一个:

26525285981219105863630848482795

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

val bi = 26525285981219105863630848482795 //compile error

但我希望它是一个BigInteger. 有什么办法可以直接粘贴到源代码中?

如果没有这样的方法,那么 Scala 中有没有一种方法,它有一个更容易使用的BigInt类?

4

3 回答 3

18

从 Java 的角度来看, rtperson 的答案是正确的,但是在 Scala 中,您可以使用 s 做的事情scala.BigInt比使用 s可以做的更多java.math.BigInteger

例如:

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 中实例化类的规范方法是使用位于 伴随对象中的工厂。当您在 Scala 中编写 Foo(args) 时,它被转换为 Foo.apply(args),其中 Foo 是一个单例对象 - 伴生对象。因此,要找到构造BigInts 的方法,您可以查看BigIntScala 库中的对象,特别是其apply构造。

因此,构造 an 的三种方法BigInt是:传递它 an Int, aLong或 aString进行解析。例子:

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

请注意,您可以使用 a 进行看起来自然的算术运算BigInt,而使用 a 是不可能的BigInteger

于 2009-11-06T19:44:48.313 回答
6

这应该有效:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

BigInteger 读取字符串并将它们解析为正确的数字。因此,您需要查看 java.text.NumberFormat。

于 2009-11-06T18:31:42.863 回答
3

从 开始Scala 3,并且对数字文字进行了改进,您可以使用以下形式:

val big: BigInt = 26525285981219105863630848482795
// 26525285981219105863630848482795

甚至:

val big: BigInt = 26_525_285_981_219_105_863_630_848_482_795
// 26525285981219105863630848482795
于 2020-06-01T13:09:58.290 回答