Вычитая '0' для преобразования строки в int вручную

1

Привет, У меня есть этот код для преобразования String в int вручную.

int num = 0;
for(int i = 0; i < length(number); i++) {
    num *= 10;
    num += number.charAt(i) - '0';
    println("i :" + num);
}

Почему мы вычитаем "0" в конце?

  • 2
    Это как-то связано с ASCII-кодом?
  • 0
    Это потому, что char на самом деле short интерпретируется по-другому. Таким образом, вы рассчитываете «расстояние от '0' »
Показать ещё 2 комментария
Теги:
parseint

4 ответа

2
Лучший ответ

Метод .charAt(int position) возвращает один символ из вашей числовой строки. Поскольку ваша строка содержит номер, вы получите символ, который содержит цифру (0 - 9). Следующим шагом будет преобразование этого символа в int.

наивное решение было бы:

char digit = number.charAt(i);
if (digit == '0') {
    num += 0;
} else if (digit == '1') {
    num += 1;
}

Но мы можем использовать значения ASCII наших символов, чтобы упростить это. Взгляните на эту таблицу ASCII (только столбцы "Dec" и "Chr"). Вы увидите, что символ 0 фактически имеет значение 48. Поэтому, если мы вычтем 48 из нашего символа, мы получим правильное значение:

int num = digit - 48;

Это может быть даже упрощено путем непосредственного размещения символа, который будет заменен компилятором:

int num = digit - '0';

пример:

символ '4' имеет значение ASCII 52. Если мы выберем 48 получим 4, который является искомым результатом.

2

Если number является String интерпретируемой как число, number.charAt(i) является символом от '0' —— '9', если вы представляете char виде чисел, это будет 0 —— 9, переместится в код '0' (что-то вроде '0' —— '0' + 9), поэтому для получения точной цифры (как int: number) вы должны вычесть код '0' из char.

1

Символ "0" равен знаку 48.

'0' 48
'1' 49
'2' 50
...
'9' 57

Пример:

Если number.charAt(i) было "9", а 9 "- символ 57, то 57 - 48 = 9

0

Значение ASCII '0' равно 48, '1' равно 49 и так далее. Пример: если переменная char chor содержит "5", теперь значение ASCII "5" равно 53. Если мы хотим выполнить математическую операцию "5", мы должны преобразовать ее в int, чтобы мы получили ее целочисленное значение, поэтому мы используем ch- '0' (это означает '5' - '0', что означает 53-48, то есть 5), делая это, мы получаем целое значение '5'. Теперь мы можем выполнить математическую операцию. Если вы выполняете математическую операцию на "5", компилятор будет рассматривать ее как 53.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню