Android/Kotlin 中的操作顺序
Order of operations in Android/Kotlin
任何人都可以向我解释为什么这段代码有效:
if (questionList[currentIndex].answer == inputAnswer) {
correctAnswers += 1*100/questionList.size
percentage.text = "Правильно: $correctAnswers%"
而这个没有:
if (questionList[currentIndex].answer == inputAnswer) {
correctAnswers += 1/questionList.size*100
percentage.text = "Правильно: $correctAnswers%"
当我点击一个按钮,用第一段代码设置时,一切正常,我的 textView 得到更新,但是当我改变操作顺序时,没有任何反应(textView.text 没有改变这是价值)。
我是不是漏掉了什么?
提前致谢!
当您对整数进行数学计算时,不会保留小数部分。假设问题列表的大小是 10.
在您的第一个代码块中,您有
1 * 100 / 10
运算是从左到右进行的,所以在第一次乘法之后,你有
100 / 10
解析为 10。
现在有了第二个代码块
1 / 10 * 100
浮点数的第一个除法是 0.1,但对于整数,由于不保留小数,因此计算结果为 0。
0 * 100
解析为 0。因此,如果被除数小于除数,则结果始终为零。
如果你真的想要呈现小数,你应该使用浮点数,如果你想要结果是一个Int,在结果上使用roundToInt()
。如果您只使用 toInt()
,它只会舍去分数而不是四舍五入到最接近的整数。
任何人都可以向我解释为什么这段代码有效:
if (questionList[currentIndex].answer == inputAnswer) {
correctAnswers += 1*100/questionList.size
percentage.text = "Правильно: $correctAnswers%"
而这个没有:
if (questionList[currentIndex].answer == inputAnswer) {
correctAnswers += 1/questionList.size*100
percentage.text = "Правильно: $correctAnswers%"
当我点击一个按钮,用第一段代码设置时,一切正常,我的 textView 得到更新,但是当我改变操作顺序时,没有任何反应(textView.text 没有改变这是价值)。
我是不是漏掉了什么?
提前致谢!
当您对整数进行数学计算时,不会保留小数部分。假设问题列表的大小是 10.
在您的第一个代码块中,您有
1 * 100 / 10
运算是从左到右进行的,所以在第一次乘法之后,你有
100 / 10
解析为 10。
现在有了第二个代码块
1 / 10 * 100
浮点数的第一个除法是 0.1,但对于整数,由于不保留小数,因此计算结果为 0。
0 * 100
解析为 0。因此,如果被除数小于除数,则结果始终为零。
如果你真的想要呈现小数,你应该使用浮点数,如果你想要结果是一个Int,在结果上使用roundToInt()
。如果您只使用 toInt()
,它只会舍去分数而不是四舍五入到最接近的整数。