以毫秒为单位计算年长否定答案

时间:2018-11-16 17:07:44

标签: kotlin

我正在尝试使用函数以毫秒为单位转换14年

    fun getMinimumAgeInMillis(): Long {
        val long: Long = 1000 * 60 * 60 * 24 * 365 * 14
        return (long)
    }

但是,我得到的不是负值,而是-877631488。那么,哪里有问题?我没有遇到太多限制

1 个答案:

答案 0 :(得分:5)

如果使用像IntelliJ这样的IDE,它会提示您问题所在:

enter image description here

由于类型不匹配,它将溢出。 Kotlin在类型方面很严格,除了乘法之外,这有点类似于整数除法。

1000表示整数。它将自动装箱到很长的时间,但是您从int开始。相关,请记住1 / 3!= 1f / 3f的方式。您需要做的就是明确声明类型一次。您也可以为所有人完成此操作,但是我设法用一个修复了它。

因此,使用1000L * 60 * 60 * 24 * 365 * 14代替当前的乘法。请注意添加的L,它将单个类型转换为Long。否则,它们默认为整数,这将导致溢出,并将其强制转换为Long。


如果使用IntelliJ或Android Studio,请尝试删除显式类型。如果您启用了这些标签(不完全确定它们的名称,但这不重要),您会看到它显示Int,而不是Long

enter image description here

L添加到其中一个,然后按预期更改为Long。请注意,L需要在乘法运算的早期添加。如果您将其添加到例如14,它将在转换为整数之前溢出。再次以1 / 3为例,1f / 3f是一种方法,但是1 / 3f1f / 3也是有效的。基本上,在“错误”操作发生之前,类型必须正确。