Вопрос

У меня проблема с классом 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top