Java / Scala BigInteger粘贴

问题描述 投票:10回答:3

我对Java BigInteger类有问题:我不能将较大的值粘贴到BigInteger中。例如,假设我要为此数字分配BigInteger

26525285981219105863630848482795

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

val bi = 26525285981219105863630848482795 //compile error

但是我希望它成为BigInteger。有什么方法可以直接将其粘贴到源代码中吗?

如果没有这种方法,那么Scala中是否有一种方法,该方法更易于使用BigInt类?

java scala biginteger bigint
3个回答
17
投票

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的三种方法是:向其传递IntLongString进行解析。例如:

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则不可能!


5
投票

这应该起作用:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

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


0
投票

随着即将发布的Scala 3Dotty),以及对numeric literals的改进,您可以使用以下格式:

val big: BigInt = 26525285981219105863630848482795
// 26525285981219105863630848482795

甚至:

val big: BigInt = 26_525_285_981_219_105_863_630_848_482_795
// 26525285981219105863630848482795
© www.soinside.com 2019 - 2024. All rights reserved.