Как преобразовать long в int в Java?
Как преобразовать long в int в Java?
Ответ 1
Простой тип литья должен сделать это:
long l = 100000;
int i = (int) l;
Обратите внимание, однако, что большие числа (обычно больше, чем 2147483647
и меньше, чем -2147483648
) потеряют некоторые из битов и будут представлены неверно.
Например, 2147483648
будет отображаться как -2147483648
.
Ответ 2
Long x = 100L;
int y = x.intValue();
Ответ 3
Для небольших значений достаточно лить:
long l = 42;
int i = (int) l;
Однако a long
может содержать больше информации, чем int
, поэтому в общем случае невозможно идеально преобразовать из long
в int
. Если long
содержит число, меньшее или равное Integer.MAX_VALUE
, вы можете преобразовать его путем кастинга, не теряя при этом никакой информации.
Например, следующий пример кода:
System.out.println( "largest long is " + Long.MAX_VALUE );
System.out.println( "largest int is " + Integer.MAX_VALUE );
long x = (long)Integer.MAX_VALUE;
x++;
System.out.println("long x=" + x);
int y = (int) x;
System.out.println("int y=" + y);
выводит на мой компьютер следующий результат:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
Обратите внимание на отрицательный знак на y
. Поскольку x
имеет значение, превышающее значение Integer.MAX_VALUE, int y
не удалось его удерживать. В этом случае он обернут вокруг отрицательных чисел.
Если вы хотите обработать этот случай самостоятельно, вы можете сделать что-то вроде:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
Все это предполагает положительные числа. Для отрицательных чисел используйте MIN_VALUE
вместо `MAX_VALUE '
Ответ 4
При использовании библиотеки Guava существуют методы Ints.checkedCast(long)
и Ints.saturatedCast(long)
для преобразования long
в int
.
Ответ 5
Так как Java 8 вы можете использовать: Math.toIntExact(длинное значение)
Возвращает значение длинного аргумента; бросая исключение, если значение переполняет int.
Исходный код Math.toIntExact
в JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Ответ 6
long x = 3;
int y = (int) x;
но предполагается, что long
можно представить как int
, вы знаете разницу между двумя?
Ответ 7
Вы можете использовать длинную обертку вместо длинного примитива и называть Long.intValue() http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#intValue()
он округляет/усекает длинное значение, соответствующее помещению в int.
Ответ 8
Если прямая трансляция показывает ошибку, вы можете сделать это следующим образом:
Long id = 100;
int int_id = (int) (id % 100000);
Ответ 9
В Java длинный - это подписанное 64-битное число, что означает, что вы можете хранить номера между -9,223,372,036,854,775,808 и 9,223,372,036,854,775,807 (включительно).
А int, с другой стороны, подписали 32-битное число, что означает, что вы можете сохранить номер между -2,147,483,648 и 2,147,483,647 (включительно).
Итак, если ваше длинное значение находится за пределами значений, разрешенных для int, вы не получите ценное преобразование.
Подробности о размерах примитивных типов Java здесь:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Ответ 10
Long l = 100;
int i = Math.round(l);
Ответ 11
В java существует строгий способ преобразования long в int
не только lnog может преобразовывать в int, любой тип класса extends Number может преобразовывать в другой тип Number вообще, здесь я покажу вам, как преобразовать long в int, другой тип наоборот.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);