#android-studio #kotlin
#android-studio #kotlin
Вопрос:
У меня есть следующий код, чтобы проверить, равно ли значение Int
or null
, и дополнительно проверить, находится ли оно ниже определенного числа:
binding.RootLayout.forEach {
if (it is EditText) {
val intOrNull = it.text.toString().toIntOrNull()
if (intOrNull == null) {
count = 1
} else if (intOrNull > 100000) {
overTheLimitExist = true
}
}
}
Проблема в том, что когда я ввожу какое-то число, подобное 123456789
или ниже, оно правильно идентифицирует его как (1) Int
и (2) выше заданного предела. Однако, если я введу большее число, например, 12345678900
оно неправильно идентифицирует его как null
.
Я ищу в Интернете toIntOrNull
, но они ничего не сказали об ограничении функции.
Комментарии:
1. Максимальный предел
Int
составляет приблизительно2*10^9
(4 байта). Над этим до4*10^18
тех пор, пока не будет использовано приблизительноLong
(8 байт). Или ещеBigInteger
что может хранить число до бесконечности: P (просто шучу, он может хранить до ~ 18 ГБ оперативной памяти).
Ответ №1:
12345678900
больше максимального значения Integer (2 ^ 31-1) , следовательно, реализация toIntOrNull
возвращает null, поскольку 12345678900
не помещается в 4 байта.
Вы можете использовать toLongOrNull
или toBigIntegerOrNull
для действительно больших чисел.
Комментарии:
1. Спасибо, я не знал об этом. Есть ли снижение производительности
toLongOrNull
?2. никакого влияния на производительность, хотя
long
занимает 8 байт памяти3. Спасибо, я все равно не сохраняю значение. Я просто выполняю преобразование.
Ответ №2:
Я думаю, что эта проблема связана с ограничением типа int (От -2 147 483 648 до 2 147 483 647) вам следует использовать другой тип, такой как "Long" или BigNumber java class. вы можете протестировать на 1 больше этого диапазона (2147483648) или на 1 меньше (2147483646) и посмотреть результат. Я надеюсь, что это поможет вам. извините за мой английский.