Вставка BigInteger в Java/Scala
-
18-09-2019 - |
Вопрос
У меня проблема с классом Java BigInteger:Я не могу вставить большое значение в BigInteger.Например, предположим, что я хочу присвоить этому числу BigInteger:
26525285981219105863630848482795
Я не могу присвоить его напрямую, потому что компилятор считает, что это целое число:
val bi = 26525285981219105863630848482795 //compile error
Но я хочу, чтобы это было BigInteger
.Есть ли способ напрямую вставить это в исходный код?Если такого способа нет, то есть ли в Scala способ, гораздо более простой в использовании? BigInt
сорт?Спасибо за помощь.
Решение
rtperson's отвечать это правильно с точки зрения Java, но в Scala вы можете сделать больше с помощью scala.BigInt
чем то, что ты можешь сделать с java.math.BigInteger
с.
Например:
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
Канонический способ создания экземпляра класса в Scala — использовать фабрику, расположенную всопутствующий объект.Когда вы пишете Foo(args) в Scala, это преобразуется в Foo.apply(args), где Foo — это одноэлементный объект — сопутствующий объект.Итак, чтобы найти способы построения BigInt
Вы могли бы взглянуть на BigInt
объект в библиотеке Scala, а конкретно в ее apply
построить.
Итак, три способа построения BigInt
являются:передав это Int
, а Long
или String
разобрать.Пример:
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
Обратите внимание на то, что вы можете выполнять естественные арифметические операции с помощью BigInt
, что невозможно с BigInteger
!
Другие советы
Это должно работать:
BigInteger bigInt = new BigInteger("26525285981219105863630848482795");
BigInteger читает строки и анализирует их до правильного числа.По этой причине вам стоит проверить java.text.NumberFormat.