Подтвердить что ты не робот

Scala char для преобразования int

def multiplyStringNumericChars(list: String): Int = {
  var product = 1;
  println(s"The actual thing  + $list")
  list.foreach(x => { println(x.toInt);
                      product = product * x.toInt;
                    });

  product;
};

Это функция, которая принимает строку типа 12345 и должна возвращать результат 1 * 2 * 3 * 4 * 5. Тем не менее, я возвращаюсь, не имеет никакого смысла. Каково фактическое возвращение неявного преобразования из Char в Int?

Кажется, он добавляет 48 ко всем значениям. Если вместо этого я сделаю product = product * (x.toInt - 48), результаты верны.

4b9b3361

Ответ 1

Имеет смысл: это способ как символы, закодированные в таблице ASCII: 0 char карты до десятичных 48, 1 карты до 49 и т.д. Таким образом, в основном, когда вы конвертируете char в int, все, что вам нужно сделать, это просто вычесть "0":

scala> '1'.toInt
// res1: Int = 49

scala> '0'.toInt
// res2: Int = 48

scala> '1'.toInt - 48
// res3: Int = 1

scala> '1' - '0'
// res4: Int = 1

Или просто используйте x.asDigit, как сказал @Reimer

scala> '1'.asDigit
// res5: Int = 1