Java/Scala BigInteger粘贴

Java/Scala BigInteger粘贴,java,scala,biginteger,bigint,Java,Scala,Biginteger,Bigint,Javabiginger类有一个问题:我无法将一个大值粘贴到biginger中。例如,假设我想给这个数字分配一个biginger: 26525285981219105863084848482795 我不能直接赋值,因为编译器认为它是一个整数: val bi=26525285981219105863630848482795//编译错误 但我希望它是一个大整数。有没有办法可以直接将其粘贴到源代码中 如果没有这样的方法,那么Scala中是否有一种方法更易于使用BigInt类?这应该可以: BigI

Java
biginger
类有一个问题:我无法将一个大值粘贴到
biginger
中。例如,假设我想给这个数字分配一个
biginger

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

val bi=26525285981219105863630848482795//编译错误
但我希望它是一个
大整数
。有没有办法可以直接将其粘贴到源代码中

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

这应该可以:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");
BigInteger读取字符串并将其解析为正确的数字。因此,您需要检查java.text.NumberFormat。

从java的角度来看,rtperson是正确的,但是在Scala中,您可以使用
Scala.BigInt
s做更多的事情,而不是使用
java.math.biginger
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中实例化类的规范方法是使用位于 . 当您在Scala中编写Foo(args)时,会将其转换为Foo.apply(args),其中Foo是一个单例对象——伴随对象。因此,要找到构造
BigInt
s的方法,您可以查看Scala库中的
BigInt
对象,特别是它的
apply
构造

因此,构造
BigInt
的三种方法是:传递
Int
Long
字符串进行解析。例如:

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
执行外观自然的算术运算,这在
biginger
中是不可能的

从Scala 3开始,并对其进行改进,您可以使用以下表格:

val big: BigInt = 26525285981219105863630848482795
// 26525285981219105863630848482795
甚至:

val big: BigInt = 26_525_285_981_219_105_863_630_848_482_795
// 26525285981219105863630848482795

你所说的“编译器认为它是一个整数”是什么意思。编译器怎么能认为一个30位的数字是一个整数呢?@oxbow-我认为Michael的意思是Scala编译器认为文本是一个整数,然后抱怨“整数太大”。在Scala解释器中尝试
val a=26525285981219105863630848482795
)。