Android/Kotlin运算顺序不同导致代码运行效果异常问题咨询
问题原因
你遇到的是整数除法的截断规则问题,这是JVM系语言(Kotlin/Java等)的基础运算规则,核心知识点如下:
- 两个整数做除法运算时,默认执行截断向零取整的整数除法,只会保留整数部分,小数部分直接丢弃。
- 乘除运算优先级相同,会按照从左到右的顺序依次执行。
第一段代码正常运行的逻辑
运算表达式为 1 * 100 / questionList.size:
- 先执行左侧乘法:
1 * 100得到整数结果100 - 再执行除法:
100 / questionList.size,只要总题数不超过100,这里得到的结果就是≥1的整数,累加后correctAnswers数值会正常变化,textView自然会更新。
第二段代码无响应的逻辑
运算表达式为 1 / questionList.size * 100:
- 先执行左侧除法:
1 / questionList.size,只要总题数questionList.size大于1,这个式子的结果就是小于1的小数,整数除法会直接截断小数部分得到结果0 - 再执行乘法:
0 * 100 = 0,每次累加的都是0,correctAnswers数值不会有任何变化,textView看起来就像没有更新。
修复方案
如果需要保留小数精度,可以将任意一个操作数转为浮点型再运算:
correctAnswers += 1.0 / questionList.size * 100
如果只需要整数百分比,保持第一段代码的运算顺序即可。
内容的提问来源于stack exchange,提问作者Vsevolod IV
相关产品推荐
相关产品推荐

