Frage

Ich habe ein Problem mit der Java BigInteger Klasse: Ich kann nicht einen großen Wert in BigInteger einfügen kann. Zum Beispiel, sagen wir mal ich einen BigInteger auf diese Nummer zugewiesen werden soll:

26525285981219105863630848482795

Ich kann es nicht direkt zuzuordnen, da der Compiler denkt, es ist eine ganze Zahl:

val bi = 26525285981219105863630848482795 //compile error

Aber ich will es ein BigInteger sein. Gibt es eine Möglichkeit direkt zu können, fügen Sie diese in den Quellcode? Wenn es keine solche Art und Weise ist, dann ist es eine Möglichkeit, in Scala, die viel leichter hat BigInt Klasse zu bedienen? Danke für die Hilfe.

War es hilfreich?

Lösung

beantworten aus einer Java-Perspektive richtig, aber in Scala Sie mehr tun, können mit scala.BigInts als das, was Sie mit java.math.BigIntegers tun können.

Zum Beispiel:

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

Die kanonische Weise in Scala eine Klasse zu instanziiert ist eine Fabrik in der Lage zu verwenden, Begleitobjekt . Wenn Sie Foo (args) in Scala schreiben, wird dies Foo.apply (args) übersetzt, wo Foo ein Singleton-Objekt - das Objekt Begleiter. So findet die Wege BigInts konstruieren Sie einen Blick auf dem BigInt Objekt in der Scala Bibliothek haben könnten, und zwar an seinem apply Konstrukt.

So, drei Möglichkeiten, eine BigInt Konstruktion sind: Leiten sie eine Int, eine Long oder eine String zu analysieren. Beispiel:

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

Beachten Sie die nette Sache, die Sie natürlich arithmetische Operationen mit einem BigInt suchen tun kann, was nicht möglich mit einem BigInteger ist!

Andere Tipps

Dies sollte funktionieren:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

BigInteger liest Strings und analysiert sie in die richtige Nummer. Aus diesem Grund, möchten Sie java.text.NumberFormat überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top