我对Java BigInteger
类有问题:我不能将较大的值粘贴到BigInteger
中。例如,假设我要为此数字分配BigInteger
:
26525285981219105863630848482795
我不能直接分配它,因为编译器认为它是整数:
val bi = 26525285981219105863630848482795 //compile error
但是我希望它成为BigInteger
。有什么方法可以直接将其粘贴到源代码中吗?
如果没有这种方法,那么Scala中是否有一种方法,该方法更易于使用BigInt
类?
rtperson的answer从Java的角度来看是正确的,但是在Scala中,与scala.BigInt
相比,您可以使用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中实例化类的规范方法是使用位于companion object。当您在Scala中编写Foo(args)时,这将转换为Foo.apply(args),其中Foo是单例对象-伴随对象。因此,要找到构造BigInt
的方法,您可以查看Scala库中的BigInt
对象,尤其是其apply
构造。
因此,构造BigInt
的三种方法是:向其传递Int
,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
请注意,您可以使用BigInt
进行自然的算术运算,而使用BigInteger
则不可能!
这应该起作用:
BigInteger bigInt = new BigInteger("26525285981219105863630848482795");
BigInteger读取字符串并将其解析为正确的数字。因此,您将需要检出java.text.NumberFormat。
随着即将发布的Scala 3
(Dotty),以及对numeric literals的改进,您可以使用以下格式:
val big: BigInt = 26525285981219105863630848482795
// 26525285981219105863630848482795
甚至:
val big: BigInt = 26_525_285_981_219_105_863_630_848_482_795
// 26525285981219105863630848482795