Kotlin中算术表达式内的整数转换
在下面的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 /
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。