36
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),结果是正确的。

4

1 回答 1

77

这确实有意义:这就是在 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
于 2013-04-26T17:24:52.257 回答