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)
,结果是正确的。
答案 0 :(得分:58)
确实有意义:这就是how characters encoded in ASCII table的方式: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