Kotlin中字符调用toInt()返回50而非对应数字的问题求解
问题原因
你代码中拿到的sliced[0]是Char类型,Kotlin中Char类的toInt()方法返回值是该字符对应的ASCII编码值,字符'2'的ASCII码就是50,所以才会输出非预期结果,和你的转换逻辑无关,属于方法调用选择错误。
解决方法
两种常用修正方式:
- 先将字符转为字符串再转整数:
sliced[0].toString().toInt() - 使用Kotlin提供的字符转数字专用方法(Kotlin 1.5及以上版本支持):
sliced[0].digitToInt()
修正后代码
fun main(args: Array<String>) { fun addTwoDigits(n: Int): Int { val sliced = n.toString().toList() val int1 = sliced[0].digitToInt() println(sliced[0]) //输出 "2" println(int1) // 输出 2 return sliced[0].digitToInt() + sliced[1].digitToInt() } println(addTwoDigits(29)) // 输出11 }
通用实现(支持任意位数整数求和)
如果需要适配任意长度的整数各位求和,可以直接遍历转换后的字符序列累加:
fun sumDigits(n: Int): Int { return n.toString().sumOf { it.digitToInt() } } // 测试:sumDigits(1234) 返回1+2+3+4=10
内容的提问来源于stack exchange,提问作者yazmnh87
相关产品推荐
相关产品推荐

