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
相关产品推荐
相关产品推荐

