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