Как преобразовать 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 '

Ответ 5

Так как Java 8 вы можете использовать: Math.toIntExact(длинное значение)

См. JavaDoc: 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);

convert long to int