2016-04-09 2 views
2

Я пытаюсь преобразовать строку "1000000000000001" на базе 5 с использованием Java:Java NumberFormatException при преобразовании 1000000000000001 базировать 5

Integer number = Integer.parseInt("1000000000000001", 5);

Однако я Джеттиг NumberFormatException. Строка обрезается и содержит только 1 и 0. Может кто-нибудь объяснить, почему я получаю это исключение?

+0

@Tunaki - Имеет смысл, на самом деле строка "1000000000000001", и все, что я пытаюсь сделать, это найти представление этой строки в базе 5. Смогу ли я это сделать? – sunsin1985

+1

Нет, он слишком велик для 'int'. Визуальное упражнение: попробуйте свой код с радиусом 2, затем 3, затем 4 и сравните результаты. Когда вы достигнете 5, вы поймете, почему это ломается. – Tunaki

ответ

6

Номер 1000000000000001 в базе 5 эквивалентен номеру 30517578126 в базе 10 (вы можете проверить это самостоятельно или использовать online tools).

Однако 30,517,578,126 является слишком большим, чтобы соответствовать значению int. Максимальное значение, Integer.MAX_VALUE - 2,147,483,647. Это объясняет исключение вы получаете - от parseInt:

кидает NumberFormatException - если строка не содержит оформленную int.

который здесь.

Вы должны использовать long:

public static void main(String[] args) { 
    long number = Long.parseLong("1000000000000001", 5); 
    System.out.println(number); // prints "30517578126" 
}