You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,可能性较低。

解决步骤

  1. 替换为正确的实现并添加防护:直接用Option 1的逻辑,同时加上除数为0的防护(避免崩溃):
private fun getPercent(timeTaken: Int, timeGiven: Int): Int {
    // 防止除数为0导致崩溃,可根据业务需求调整返回值
    if (timeGiven <= 0) return 0
    return ((timeTaken.toDouble() / timeGiven) * 100).roundToInt()
}
  1. 加日志确认参数与计算过程:在函数里添加日志,确保传入的参数是你预期的数值:
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里的日志,就能清楚看到运算的参数和结果是否符合预期。

  1. 检查调用代码:确认调用时确实传入了正确的变量:
// 确保这里的TimeTaken和TimeGiven是你测试的那两个变量
TIMETAKitem.text = getPercent(TimeTaken, TimeGiven).toString()

内容的提问来源于stack exchange,提问作者UnknownError

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:19:12