Ответы:
Обновлено в Java 8:
Math.toIntExact(value);
Оригинальный ответ:
Простое приведение типов должно сделать это:
long l = 100000;
int i = (int) l;
Обратите внимание, однако, что большие числа (обычно больше 2147483647
и меньше чем -2147483648
) будут терять некоторые биты и будут представлены неправильно.
Например, 2147483648
будет представлен как -2147483648
.
Long x = 100L;
int y = x.intValue();
intValue()
здесь, на заднем плане - это приведение значения.
long
здесь. Это ссылочный тип, Long
который не может быть напрямую приведен к примитиву int
. int y = (int)x;
будет бросать, но int y = (int)(long)x
будет работать. (Причина в автобоксе)
Для небольших значений достаточно литья:
long l = 42;
int i = (int) l;
Тем не менее, 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 '
Начиная с 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;
}
Если вы используете библиотеку Guava , есть методы Ints.checkedCast(long)
и Ints.saturatedCast(long)
для преобразования long
вint
.
long x = 3;
int y = (int) x;
но это предполагает, что long
можно представить как int
, вы знаете разницу между ними?
Вы можете использовать Long
оболочку вместо long
примитива и вызова
Long.intValue()
Это округляет / усекает long
значение соответственно, чтобы соответствовать в int
.
Если прямое приведение показывает ошибку, вы можете сделать это так:
Long id = 100;
int int_id = (int) (id % 100000);
В Java long - это 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 (включительно).
Поэтому, если ваш long находится за пределами значений, разрешенных для int, вы не получите полноценного преобразования.
Подробности о размерах примитивных типов Java здесь:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
В Java 8 я делаю следующим образом
long l = 100L;
int i = Math.toIntExact(l);
Этот метод выдает, ArithmaticException
если long
значение превышает диапазон int
. Таким образом, я в безопасности от потери данных.
Если вы хотите сделать безопасное преобразование и наслаждаться использованием Java8 с лямбда-выражением, вы можете использовать его следующим образом:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =
?
длинный х = 3120 л; // принять любое длинное значение int z = x.intValue (); // вы также можете конвертировать double в int таким же образом
если вам нужно скрыть напрямую, то
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
Весной есть строгий способ конвертировать long в int
не только lnog может конвертировать в int, любой тип расширяет класс Number может конвертировать в другой тип Number в общем, здесь я покажу вам, как конвертировать long в int, другой тип наоборот.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);