Respostas:
Atualizado, em Java 8:
Math.toIntExact(value);
Resposta original:
A conversão de tipo simples deve fazer isso:
long l = 100000;
int i = (int) l;
Observe, no entanto, que números grandes (geralmente maiores que 2147483647
e menores que -2147483648
) perderão alguns bits e seriam representados incorretamente.
Por exemplo, 2147483648
seria representado como -2147483648
.
Long x = 100L;
int y = x.intValue();
intValue()
faz aqui no fundo está lançando o valor .. Certo?
long
aqui. É o tipo de referência Long
que não pode ser convertido diretamente em um primitivo int
. int y = (int)x;
lançará uma execução, mas int y = (int)(long)x
funcionará. (A razão é autoboxing)
Para valores pequenos, a conversão é suficiente:
long l = 42;
int i = (int) l;
No entanto, um long
pode conter mais informações que um int
, portanto, não é possível converter perfeitamente de long
para int
, no caso geral. Se o long
número tiver um número menor ou igual a Integer.MAX_VALUE
você, você poderá convertê-lo lançando sem perder nenhuma informação.
Por exemplo, o seguinte código de exemplo:
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);
produz a seguinte saída na minha máquina:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
Observe o sinal negativo y
. Como x
mantinha um valor maior que Integer.MAX_VALUE, int y
não foi possível mantê-lo. Nesse caso, ele volta para os números negativos.
Se você quiser lidar com esse caso, faça algo como:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
Tudo isso assume números positivos. Para números negativos, use em MIN_VALUE
vez de `MAX_VALUE '
Desde o Java 8, você pode usar: Math.toIntExact (valor longo)
Consulte JavaDoc: Math.toIntExact
Retorna o valor do argumento longo; lançando uma exceção se o valor exceder um valor int.
Código fonte de Math.toIntExact
no JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Se estiver usando biblioteca de goiaba , existem métodos Ints.checkedCast(long)
e Ints.saturatedCast(long)
para converter long
a int
.
long x = 3;
int y = (int) x;
mas isso pressupõe que o long
pode ser representado como um int
, você sabe a diferença entre os dois?
Você pode usar o Long
wrapper em vez de long
primitivo e chamar
Long.intValue()
Arredonda / trunca o long
valor de acordo para caber em um int
.
Se a transmissão direta mostrar erro, você poderá fazer o seguinte:
Long id = 100;
int int_id = (int) (id % 100000);
Em Java, long é um número assinado de 64 bits, o que significa que você pode armazenar números entre -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807 (inclusive).
Um int, por outro lado, é assinado com um número de 32 bits, o que significa que você pode armazenar um número entre -2.147.483.648 e 2.147.483.647 (inclusive).
Portanto, se o seu comprimento estiver fora dos valores permitidos para um int, você não receberá uma conversão valiosa.
Detalhes sobre tamanhos de tipos Java primitivos aqui:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
No Java 8 eu faço da seguinte maneira
long l = 100L;
int i = Math.toIntExact(l);
Este método lança ArithmaticException
se o long
valor exceder o intervalo de int
. Portanto, estou seguro de perda de dados.
Se você deseja fazer uma conversão segura e aproveitar o uso do Java8 com expressão Lambda, use-o como:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =
?
x longo = 3120L; // aceita qualquer valor longo int z = x.intValue (); // você pode converter double em int também da mesma maneira
se você precisar se esconder diretamente,
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
Na primavera, existe uma maneira rigorosa de converter um tempo para int
não apenas o lnog pode converter em int, qualquer tipo de classe estende Number pode converter para outro tipo de Number em geral, aqui mostrarei como converter um comprimento em int, outro tipo vice-versa.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);