Java / ScalaのBigIntegerを貼り付け
-
18-09-2019 - |
質問
私は、JavaのBigIntegerクラスに問題がある:私はBigIntegerに大きな値を貼り付けることはできません。たとえば、のは、私がこの番号にBigIntegerのを割り当てたいとしましょう。
26525285981219105863630848482795
コンパイラは、それが整数だと思っているので、私は、それを直接割り当てることはできません。
val bi = 26525285981219105863630848482795 //compile error
しかし、私はそれはBigInteger
になりたいです。直接ソースコードにこれを貼り付けることができるようにする方法はありますか?そのような方法がない場合には、BigInt
クラスを使用する方がはるかに簡単がありScalaでは方法が、ありますか?助けてくれてありがとう。
解決
rtpersonの答えには、Javaの観点から、しかし、Scalaのあなたに正しいですあなたがscala.BigInt
sで何ができるかよりもjava.math.BigInteger
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がシングルトンオブジェクトであるFoo.apply(引数)に変換されます。ですから、Scalaのライブラリーでは、特にそのBigInt
の構築物にBigInt
オブジェクトを見ている可能性がapply
sを構築する方法を見つけること。
だから、BigInt
を構築する3つの方法がある:それを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をチェックアウトすることをお勧めします。