I have a problem with the Java BigInteger
class: I can't paste a large value into BigInteger
. For example, let's say I want to assign a BigInteger
to this number:
26525285981219105863630848482795
I cannot assign it directly, because the compiler thinks it's an integer:
val bi = 26525285981219105863630848482795 //compile error
But I want it to be a BigInteger
. Is there any way to be able to directly paste this into the source code?
If there is no such way, then is there a way in Scala, which has a much easier to use BigInt
class?
Starting in Scala 3
, and improvements brought to numeric literals, you can use the following form:
val big: BigInt = 26525285981219105863630848482795
// 26525285981219105863630848482795
or even:
val big: BigInt = 26_525_285_981_219_105_863_630_848_482_795
// 26525285981219105863630848482795
rtperson's answer is correct from a Java perspective, but in Scala you can do more with scala.BigInt
s than what you can do with java.math.BigInteger
s.
For example:
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
The canonical way in Scala to instantiate a class is to use a factory located in the
companion object. When you write Foo(args) in Scala, this is translated to Foo.apply(args), where Foo is a singleton object - the companion object. So to find the ways of constructing BigInt
s you could have a look at the BigInt
object in the Scala library, and specifically at its apply
construct.
So, three ways of constructing an BigInt
are: passing it an Int
, a Long
or a String
to parse. Example:
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
Note the nice thing that you can do natural looking arithmetic operations with a BigInt
, which is not possible with a BigInteger
!
This should work:
BigInteger bigInt = new BigInteger("26525285981219105863630848482795");
BigInteger reads strings and parses them into the correct number. Because of this, you'll want to check out java.text.NumberFormat.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With