質問

私は、JavaのBigIntegerクラスに問題がある:私はBigIntegerに大きな値を貼り付けることはできません。たとえば、のは、私がこの番号にBigIntegerのを割り当てたいとしましょう。

26525285981219105863630848482795

コンパイラは、それが整数だと思っているので、私は、それを直接割り当てることはできません。

val bi = 26525285981219105863630848482795 //compile error

しかし、私はそれはBigIntegerになりたいです。直接ソースコードにこれを貼り付けることができるようにする方法はありますか?そのような方法がない場合には、BigIntクラスを使用する方がはるかに簡単がありScalaでは方法が、ありますか?助けてくれてありがとう。

役に立ちましたか?

解決

rtpersonの答えには、Javaの観点から、しかし、Scalaのあなたに正しいですあなたがscala.BigIntsで何ができるかよりもjava.math.BigIntegersでより多く行うことができます。

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オブジェクトを見ている可能性がapplysを構築する方法を見つけること。

だから、BigIntを構築する3つの方法がある:それをIntLongまたは解析する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をチェックアウトすることをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top