作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用函数将 14 年转换为毫秒
fun getMinimumAgeInMillis(): Long {
val long: Long = 1000 * 60 * 60 * 24 * 365 * 14
return (long)
}
但是我得到的不是我的值而是负值-877631488。那么,问题出在哪里呢?我没有遇到长期限制
最佳答案
如果您使用像 IntelliJ 这样的 IDE,它会提示您该问题:
由于类型不匹配,会溢出。 Kotlin 在类型方面非常严格,这有点类似于整数除法,除了乘法。
1000
表示整数。它会将其自动装箱为 long,但您以 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
也是有效的。基本上,在“错误”操作发生之前,类型需要正确。
关于kotlin - 以毫秒为单位计算年长否定答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53342432/
我是一名优秀的程序员,十分优秀!