2013-04-26 32 views
23
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; 
}; 

Đây là một hàm có chuỗi giống như 12345 và phải trả lại kết quả là 1 * 2 * 3 * 4 * 5. Tuy nhiên, tôi nhận được trở lại không có ý nghĩa gì cả. Chuyển đổi ngầm ẩn từ Char thành Int thực sự trở lại là gì?Scala char to int conversion

Dường như thêm 48 vào tất cả các giá trị. Nếu thay vào đó tôi làm product = product * (x.toInt - 48) kết quả là chính xác.

+9

Đối với một nhân vật, toInt lợi nhuận mã ký tự tương ứng. Sử dụng x.asDigit để có được số nguyên tương ứng với một chữ số (điều này làm việc cho đến cơ sở 36 nếu bạn bao gồm các chữ cái). –

Trả lời

50

Có ý nghĩa: đó là cách how characters encoded in ASCII table: 0 bản đồ char đến số thập phân 48, 1 bản đồ đến 49 và cứ tiếp tục như vậy. Vì vậy, về cơ bản khi bạn chuyển đổi char sang int, tất cả các bạn cần làm là chỉ cần trừ đi '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 

Hoặc chỉ cần sử dụng x.asDigit, như @Reimer nói

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