Как я могу преобразовать 16-значную строку выше в целое число в java?

Я новичок в java. Пожалуйста, помогите мне,

int i = Integer.parseInt("9876543210123456");
System.out.println("Integer: " + i);

я получил ошибку ниже,

java.lang.NumberFormatException for input string : "9876543210123456"

person Kannan Arumugam    schedule 02.12.2013    source источник
comment
Максимальное значение Integer равно 2^32 -1, это намного больше. Вместо этого используйте BigInteger   -  person Jeroen Vannevel    schedule 02.12.2013
comment
Это не имеет ничего общего с JSP (даже если вы столкнулись с проблемой в JSP). Это все о int.   -  person Andrew Thompson    schedule 02.12.2013
comment
Стоит ли добавлять тег numberformatexception? Не то чтобы кто-то на самом деле следует этому.   -  person Chris Hayes    schedule 02.12.2013
comment
Итак, так много тегов по сути бесполезны. Тем не менее, они поддерживаются новыми пользователями, которые отмечают каждое ключевое слово в своем вопросе.   -  person Jeroen Vannevel    schedule 02.12.2013
comment
@ChrisHayes Конечно, если только для группировки вопросов и поиска дубликатов.   -  person Andrew Thompson    schedule 02.12.2013


Ответы (7)


Он превышает целочисленный лимит. Вам нужно BigInteger

BigInteger b = new BigInteger("9876543210123456");
person Suresh Atta    schedule 02.12.2013

Вы не можете преобразовать приведенное выше значение в int, так как оно превышает максимальное значение Integer: 2 147 483 647.

Вместо этого попробуйте:

Long.parseLong("9876543210123456");

Лонг имеет максимальное значение 9 223 372 036 854 775 807.

Чтобы проверить максимальные значения этих и других примитивных типов данных, попробуйте:

Integer.MAX_VALUE;
Long.MAX_VALUE;
// etc for Float, Double...
// Also try MIN_VALUE
person Taylor Hx    schedule 02.12.2013

В Java примитивный тип данных int представляет собой 32-разрядное целое число в дополнении до двух со знаком http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Вы можете использовать Длинный:

long i = Long.parseLong("9876543210123456");
System.out.println("Long: " + i);

См. API здесь — http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html

Или вы также можете использовать BigInteger:

BigInteger i = new BigInteger("9876543210123456");
System.out.println("BigInteger: " + i);

См. API здесь — http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

BigInteger аналогичен примитивным целочисленным типам, за исключением того, что он обеспечивает произвольную точность, поэтому операции над BigInteger не переполняются и не теряют точность. В дополнение к стандартным арифметическим операциям BigInteger обеспечивает модульную арифметику, вычисление НОД, проверку простоты, генерацию простых чисел, манипулирование битами и несколько других различных операций.

Если вы не уверены, следует ли использовать примитив или ссылку на объект, вот хорошее обсуждение

Когда использовать примитивные и ссылочные типы в Java

person Indu Devanath    schedule 02.12.2013

В java диапазон int составляет от -2 147 483 648 до 2 147 483 647. Так что попробуйте long вместо int.

person Vimal Bera    schedule 02.12.2013

NumberFormat nf = NumberFormat.getInstance();

Вы также можете использовать NumberFormat для анализа чисел:

 myNumber = nf.parse("9876543210123456");

увидеть ниже

http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

person Deepak    schedule 02.12.2013

Хотя BigInteger может работать, но лучший способ — оставить его только String и отобразить как String. Это идеальный способ работы с длинными цифрами, и вы не столкнетесь с какими-либо исключениями.

person roger_that    schedule 02.12.2013
comment
Тогда как вы будете выполнять арифметические операции? - person Jeroen Vannevel; 02.12.2013
comment
Это вторичный случай. Согласно чтению вопроса, если результирующее значение превышает значение MAX_INT, почему бы не сохранить его только в строке и отобразить (на консоли, веб-странице или любом другом). - person roger_that; 02.12.2013

long x = Long.parseLong("9876543210123456");

System.out.println("Integer: " + x);

или, пожалуйста, используйте следующую строку

BigInteger bint = new BigInteger("9999999999999999", 16);

Пожалуйста, попробуйте это .. Не удается преобразовать строку из более чем 13 цифр в int .. поэтому вам следует преобразовать в длинную

person Arun Kumar    schedule 02.12.2013