Java / Scala BigInteger pegar
-
18-09-2019 - |
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.
Solución
responder es correcta desde el punto de vista de Java, pero en Scala puede hacer más con scala.BigInt
s que lo que puede hacer con java.math.BigInteger
s.
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 BigInt
s 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.