我正在尝试使用函数以毫秒为单位转换14年
fun getMinimumAgeInMillis(): Long {
val long: Long = 1000 * 60 * 60 * 24 * 365 * 14
return (long)
}
但是,我得到的不是负值,而是-877631488。那么,哪里有问题?我没有遇到太多限制
答案 0 :(得分:5)
如果使用像IntelliJ这样的IDE,它会提示您问题所在:
由于类型不匹配,它将溢出。 Kotlin在类型方面很严格,除了乘法之外,这有点类似于整数除法。
1000
表示整数。它将自动装箱到很长的时间,但是您从int开始。相关,请记住1 / 3
!= 1f / 3f
的方式。您需要做的就是明确声明类型一次。您也可以为所有人完成此操作,但是我设法用一个修复了它。
因此,使用1000L * 60 * 60 * 24 * 365 * 14
代替当前的乘法。请注意添加的L
,它将单个类型转换为Long。否则,它们默认为整数,这将导致溢出,并将其强制转换为Long。
如果使用IntelliJ或Android Studio,请尝试删除显式类型。如果您启用了这些标签(不完全确定它们的名称,但这不重要),您会看到它显示Int
,而不是Long
:
将L
添加到其中一个,然后按预期更改为Long
。请注意,L
需要在乘法运算的早期添加。如果您将其添加到例如14,它将在转换为整数之前溢出。再次以1 / 3
为例,1f / 3f
是一种方法,但是1 / 3f
和1f / 3
也是有效的。基本上,在“错误”操作发生之前,类型必须正确。