Java / Scala BigInteger Einfügen
-
18-09-2019 - |
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.
Lösung
beantworten aus einer Java-Perspektive richtig, aber in Scala Sie mehr tun, können mit scala.BigInt
s als das, was Sie mit java.math.BigInteger
s 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 BigInt
s 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.