Pregunta

Tengo un problema con la clase Java BigInteger: No puedo pegar un valor grande en BigInteger. Por ejemplo, digamos que desea asignar una BigInteger a este número:

26525285981219105863630848482795

No puedo asignar directamente, porque el compilador piensa que es un entero:

val bi = 26525285981219105863630848482795 //compile error

Pero yo quiero que sea un BigInteger. ¿Hay alguna manera de poder pegar directamente esto en el código fuente? Si no existe tal manera, entonces hay una manera en la Scala, que tiene un mucho más fácil de utilizar la clase BigInt? Gracias por la ayuda.

¿Fue útil?

Solución

responder es correcta desde el punto de vista de Java, pero en Scala puede hacer más con scala.BigInts que lo que puede hacer con java.math.BigIntegers.

Por ejemplo:

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

La forma canónica en Scala crear una instancia de una clase es el uso de una fábrica situada en el objeto acompañante. Cuando se escribe Foo (args) en Scala, esto se traduce a Foo.apply (args), donde foo es un objeto único - el objeto acompañante. Así que para encontrar las formas de construir BigInts que podría tener una mirada en el objeto BigInt en la biblioteca Scala, y en concreto en su construcción apply.

Por lo tanto, tres formas de construir un BigInt son: pasándole un Int, un Long o una String a analizar. Ejemplo:

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

Tenga en cuenta lo bueno que se puede hacer de aspecto natural operaciones aritméticas con un BigInt, lo cual no es posible con un BigInteger!

Otros consejos

Esto debería funcionar:

BigInteger bigInt = new BigInteger("26525285981219105863630848482795");

BigInteger lee cadenas y las analiza en el número correcto. Debido a esto, usted querrá echa un vistazo a java.text.NumberFormat.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top