【问题标题】:Calculate years in millis long negative answer以毫秒为单位计算年数 否定答案
【发布时间】:2018-11-18 22:01:54
【问题描述】:

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

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

但我得到的不是我的值,而是负值 -877631488。那么,哪里出了问题?我没有达到长期的限制

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    如果您使用 IntelliJ 之类的 IDE,它会提示您该问题:

    它会溢出,因为类型不匹配。 Kotlin 在类型方面是严格的,这有点类似于整数除法,除了乘法。

    1000 表示整数。它会将它自动装箱,但你从一个 int 开始。相关,记住1 / 3 != 1f / 3f。您需要做的就是显式声明类型once。你也可以为所有人做这件事,但我设法用一个人来解决它。

    所以不要使用当前的乘法,而是使用1000L * 60 * 60 * 24 * 365 * 14。注意添加的L,它将单个类型转换为 Long。否则,它们默认为整数,这会导致转换为 Long 的溢出。


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多