Java에서 long을 int로 변환하려면 어떻게해야합니까?
Java에서 long을 int로 변환하려면 어떻게해야합니까?
Java 8에서 업데이트되었습니다.
Math.toIntExact(value);
원래 답변 :
간단한 유형 캐스팅이 수행해야합니다.
long l = 100000;
int i = (int) l;
그러나 큰 숫자 (일반적으로보다 크 2147483647
거나 작은 -2147483648
)는 일부 비트를 잃고 잘못 표시됩니다.
예를 들어 2147483648
로 표시됩니다 -2147483648
.
Long x = 100L;
int y = x.intValue();
작은 값의 경우 캐스팅으로 충분합니다.
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 (long value)
JavaDoc : Math.toIntExact를 참조하십시오.
long 인수의 값을 반환합니다. 값이 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 ()를 호출 할 수 있습니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#intValue ()
int에 맞게 long 값을 반올림 / 잘라냅니다.
직접 캐스팅에 오류가 표시되면 다음과 같이 할 수 있습니다.
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
. 따라서 데이터 손실로부터 안전합니다.
긴 x = 3120L; // 긴 값을 취합니다. 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);
참고 URL : https://stackoverflow.com/questions/4355303/how-can-i-convert-a-long-to-int-in-java
'IT' 카테고리의 다른 글
유효한 요청이지만 빈 데이터에 적합한 REST 응답 코드는 무엇입니까? (0) | 2020.03.27 |
---|---|
문자열에 숫자 만 포함되어 있는지 확인 (0) | 2020.03.27 |
Python을 사용하여 공급자로서 Gmail로 이메일을 보내는 방법은 무엇입니까? (0) | 2020.03.27 |
iPhone 응용 프로그램을 종료하는 올바른 방법은 무엇입니까? (0) | 2020.03.27 |
객체를 생성하고 속성을 추가하려면 어떻게해야합니까? (0) | 2020.03.27 |