Domanda

Ho un problema con la classe Java BigInteger: Non posso incollare un grande valore nella BigInteger. Per esempio, diciamo che voglio assegnare un BigInteger a questo numero:

26525285981219105863630848482795

Non posso assegnarlo direttamente, perché il compilatore pensa che sia un numero intero:

val bi = 26525285981219105863630848482795 //compile error

Ma io voglio che sia un BigInteger. C'è un modo per essere in grado di incollare direttamente questo nel codice sorgente? Se non v'è alcun modo, allora c'è un modo in Scala, che ha una molto più facile da usare di classe BigInt? Grazie per l'aiuto.

È stato utile?

Soluzione

rispondere è corretto dal punto di vista di Java, ma in Scala voi può fare di più con scala.BigInts di quello che si può fare con java.math.BigIntegers.

Ad esempio:

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

Il modo canonico a Scala per creare un'istanza di una classe è quello di utilizzare una fabbrica situata nella compagno oggetto . Quando si scrive Foo (args) in Scala, questo si traduce per Foo.apply (args), dove Foo è un oggetto Singleton - l'oggetto associato. Quindi, per trovare i modi di costruire BigInts si potrebbe avere uno sguardo alla oggetto BigInt nella libreria Scala, e in particolare al suo costrutto apply.

Quindi, tre modi di costruire un BigInt sono: passando come Int, un Long o un String da analizzare. Esempio:

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

Si noti la cosa bella che si può fare dall'aspetto naturale operazioni aritmetiche con un BigInt, che non è possibile con un BigInteger!

Altri suggerimenti

Questo dovrebbe funzionare:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

BigInteger legge corde e li analizza nel numero corretto. Per questo motivo, ti consigliamo di controllare java.text.NumberFormat.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top