用毫秒长的否定答案计算年数

Str*_*ove 3 kotlin

我正在尝试用millis转换14年,使用函数

    fun getMinimumAgeInMillis(): Long {
        val long: Long = 1000 * 60 * 60 * 24 * 365 * 14
        return (long)
    }
Run Code Online (Sandbox Code Playgroud)

但不是我的价值,我得到负值-877631488.那么,哪里有问题呢?我没有遇到长期限制

Zoe*_*Zoe 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需要在乘法的早期添加.如果你在ie 14处添加它,它会在转换为整数之前溢出.以1 / 3作为再一个例子,1f / 3f是一个办法,但1 / 3f1f / 3同样有效.基本上,在"错误"操作发生之前,类型需要是正确的.