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)
, результаты верны.
Ответы
Ответ 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