Kotlin中算术表达式内的整数转换

Kotlin中算术表达式内的整数转换,kotlin,casting,Kotlin,Casting,在下面的Kotlin代码示例中,我希望参数I的值等于0,例如参数k的情况。IDE将所有i、j和k报告为Int。这是一个bug还是我需要重新调整我对Kotlin内部表达式的理解?例如,在涉及除法而非乘法的表达式中,是否有一条规则始终将/cast升级到Double fun main() { //Kotlin 1.3.61 val x = 100 * 1.0/100 //Double val i = 100 * 1/100 //Int val j = 1/100 /

在下面的Kotlin代码示例中,我希望参数
I
的值等于
0
,例如参数
k
的情况。IDE将所有
i
j
k
报告为
Int
。这是一个bug还是我需要重新调整我对Kotlin内部表达式的理解?例如,在涉及除法而非乘法的表达式中,是否有一条规则始终将/cast升级到
Double

fun main() {
    //Kotlin 1.3.61
    val x = 100 * 1.0/100 //Double
    val i = 100 * 1/100 //Int
    val j = 1/100   //Int
    val k = 100 * j //Int
    println(x) //1.0
    println(i) //1
    println(j) //0
    println(k) //0
}
我希望参数I的值等于0

输出在算术上是正确的:
100*1/100=(100*1)/100=100/100=1/1=1

,例如参数k的情况

j
0
,因此任何乘以它的值都将为零,就像
k
的情况一样

是否有规则始终将内部表达式升级/转换为双精度 涉及除法,但不涉及乘法

如果你除以整数,你会得到一个整数。如果其中一个数字是双精度的,则结果将是双精度的:

 val x = 100 * 1.0/100 //Double because 1.0 is a Double
--

事实上,kotlin论坛已经就您的问题展开了讨论:

从数学上讲,目前的行为是正确的。 这称为整数除法,其结果是商为 答复


*和/具有相同的优先级,因此它们从左到右应用。这就是为什么
i
是1。