Как преобразовать String в BigInteger, когда var содержит ".0" - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть переменная String , которая может содержать число, такое как "2015.0".Когда я пытаюсь преобразовать его в int с помощью

int i = Integer.parseInt(myVar) 

или BigInteger с

BigInteger bi = new BigInteger(myVar) 

, я получаю сообщение об ошибке

java.lang.NumberFormatException: For input string: "2015.0"

Как мне добиться правильного приведения?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Вы не можете преобразовать float в BigInteger, и ваша строка имеет десятичную точку, поэтому она автоматически считается float.У вас есть несколько вариантов, но самым простым может быть удаление десятичной части из строки, чтобы получить «2015», а затем использовать , что , для построения вашего BigInteger.

Это предполагает, что десятичная часть числа, конечно, не имеет значения.Если это так, рассмотрите возможность использования BigDecimal.

0 голосов
/ 27 февраля 2019

Вы также можете просто разобрать его в double, а затем отбросить десятичную часть, приведя к int

int i = (int) Double.parseDouble(myVar);
0 голосов
/ 27 февраля 2019

Вы можете проанализировать его как BigDecimal, а затем преобразовать в BigInteger

BigInteger bi = new BigDecimal("2015.0").toBigInteger()

Просто обратите внимание, что при этом вы можете потерять информацию о точности:

... любая дробная часть этого BigDecimal будет отброшена.Обратите внимание, что это преобразование может потерять информацию о точности значения BigDecimal.

Чтобы вызвать исключение, если преобразование является неточным (другими словами, если отбрасывается ненулевая дробная часть), использует toBigIntegerExact() метод.

Как предлагается в цитируемых javadocs, используйте toBigIntegerExact() для предотвращения случайных потерь точности, таких как тот, который может возникнуть в результате преобразования "2.5" в BigInteger (спасибо комментарий Оле ВВ за это замечание).

...