11

JavaBigIntegerクラスに問題があります。大きな値をに貼り付けることができませんBigIntegerBigIntegerたとえば、次の番号にを割り当てたいとします。

26525285981219105863630848482795

コンパイラは整数と見なすため、直接割り当てることはできません。

val bi = 26525285981219105863630848482795 //compile error

しかし、私はそれをにしたいと思いますBigInteger。これをソースコードに直接貼り付ける方法はありますか?

そのような方法がない場合、BigIntクラスをはるかに使いやすいScalaに方法はありますか?

4

3 に答える 3

18

rtpersonの答えはJavaの観点からは正しいですが、Scalaでは、sでできることよりscala.BigIntもsで多くのことができます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の標準的な方法は、 コンパニオンオブジェクトにあるファクトリを使用することです。ScalaでFoo(args)を書くと、これはFoo.apply(args)に変換されます。ここで、Fooはシングルトンオブジェクト(コンパニオンオブジェクト)です。したがって、sを構築する方法を見つけるために、Scalaライブラリーのオブジェクト、特にその構築物BigIntを見ることができます。BigIntapply

したがって、anを構築する3つの方法は次のとおりです。解析するために、a、a、またはaを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

于 2009-11-06T19:44:48.313 に答える
6

これはうまくいくはずです:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

BigInteger は文字列を読み取り、正しい数値に解析します。このため、java.text.NumberFormat を確認する必要があります。

于 2009-11-06T18:31:42.863 に答える