Если вы используете IDE, такую как IntelliJ, это подсказывает вам проблему:
Будет переполнено, потому что типы не совпадают. Котлин строг в отношении типов, и это похоже на целочисленное деление, за исключением умножения.
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 / 3f
и 1f / 3
также допустимы. В основном, типы должны быть правильными, прежде чем произойдет «неправильная» операция.