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

Kotlin中数组元素占比计算结果为0的原因咨询

问题根源:整数除法的截断特性

这是个很典型的整数除法陷阱!你遇到的问题本质是Kotlin中整数类型的除法会自动截断小数部分——当两个Int类型的数值相除时,结果只会保留整数部分,直接丢弃小数。

比如你这里的counterPositive = 4和arr.size = 5,都是Int类型,4 / 5的整数运算结果就是0,哪怕实际数学上的结果是0.8。调试时能看到正确的整数计数和长度,但除法运算触发了整数规则,所以输出0。

解决方法:转为浮点类型运算

只需要把其中至少一个操作数转换为浮点类型(比如Double),就能让除法按照浮点规则计算,保留小数部分。这里有两种常用写法:

fun plusMinus(arr: Array<Int>): Unit { 
    var counterPositive = 0 
    var counterNegative = 0 
    var counterZero = 0 
    for(i in 0 until arr.size) { 
        if(arr[i] > 0) { 
            counterPositive++ 
        } else if(arr[i] < 0) { 
            counterNegative++ 
        } else { 
            counterZero++ 
        } 
    } 
    println(counterPositive) 
    println(arr.size) 
    // 方案1:将计数转为Double后再除法
    val positiveRatio = counterPositive.toDouble() / arr.size 
    // 方案2:将数组长度转为Double后再除法(效果一致)
    // val positiveRatio = counterPositive / arr.size.toDouble()
    
    println(positiveRatio) // 此时会输出0.8
    
    // 如果需要格式化输出固定小数位数(比如算法题常要求的6位小数),可以用String格式化
    println("%.6f".format(positiveRatio)) // 输出0.800000
}

同理,计算负数和零的占比时,也需要做同样的类型转换,才能得到正确的浮点结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:42:42