Kotlin中计算百分比始终返回0问题求助
问题排查与解决方案
我来帮你搞定这个百分比计算的问题!先拆解下你遇到的情况:
先明确两个实现的问题
Option 2的写法完全错误:因为
timeTaken和timeGiven都是Int类型,Kotlin里整数除法会直接丢弃小数部分。比如你测试的4/10,在Int运算里结果是0,再乘100还是0,所以这个写法肯定得不到正确结果。Option 1的写法理论上是正确的:把
timeTaken转成Double后,除法会变成浮点运算,4.0/10=0.4,乘100得到40,roundToInt()后应该返回40才对。那你说调用后始终返回0,大概率是以下某一种情况:- 实际传入的参数和你测试的不一样:比如你以为传的是
TimeTaken=4、TimeGiven=10,但实际调用时TimeTaken是0,或者TimeGiven是一个极大的数(比如4/1000乘100是0.4,round后是0); - 变量名写错:比如调用时用了其他类似名字的变量,而非你测试的
TimeTaken和TimeGiven; - 极小概率是传反参数,但这种情况返回的是
250,不是0,可能性较低。
- 实际传入的参数和你测试的不一样:比如你以为传的是
解决步骤
- 替换为正确的实现并添加防护:直接用Option 1的逻辑,同时加上除数为0的防护(避免崩溃):
private fun getPercent(timeTaken: Int, timeGiven: Int): Int { // 防止除数为0导致崩溃,可根据业务需求调整返回值 if (timeGiven <= 0) return 0 return ((timeTaken.toDouble() / timeGiven) * 100).roundToInt() }
- 加日志确认参数与计算过程:在函数里添加日志,确保传入的参数是你预期的数值:
private fun getPercent(timeTaken: Int, timeGiven: Int): Int { Log.d("PercentCalculator", "Received params: timeTaken=$timeTaken, timeGiven=$timeGiven") if (timeGiven <= 0) { Log.d("PercentCalculator", "timeGiven is invalid: $timeGiven") return 0 } val result = ((timeTaken.toDouble() / timeGiven) * 100).roundToInt() Log.d("PercentCalculator", "Calculated result: $result") return result }
运行后查看Logcat里的日志,就能清楚看到运算的参数和结果是否符合预期。
- 检查调用代码:确认调用时确实传入了正确的变量:
// 确保这里的TimeTaken和TimeGiven是你测试的那两个变量 TIMETAKitem.text = getPercent(TimeTaken, TimeGiven).toString()
内容的提问来源于stack exchange,提问作者UnknownError
相关产品推荐
相关产品推荐

