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;
그러나 along
보다 더 많은 정보를 가질 수 있다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(긴 값)를 사용할 수 있음
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;
}
Guava 라이브러리를 사용하는 경우, 변환 방법 및 변환 방법이 있다.long
로int
.
long x = 3;
int y = (int) x;
그러나 그것은 그 다음이 될 것이라고 가정한다.long
라고 표현할 수 있다.int
너는 그 둘의 차이점을 아니?
당신은 그것을 사용할 수 있다.Long
대신에 포장하다long
원시적인
Long.intValue()
그것은 회전/트런케이트long
에 적합하도록 평가하다int
.
가장 빠르고 안전하며 손쉬운 해결책은 다음과 같다.
long myValue=...;
int asInt = Long.valueOf(myValue).intValue();
주의하십시오.Long.valueOf
다음과 같다.
다음 코드 사용:
System.out.println("Long max: " + Long.MAX_VALUE);
System.out.println("Int max: " + Integer.MAX_VALUE);
long maxIntValue = Integer.MAX_VALUE;
System.out.println("Long maxIntValue to int: " + Long.valueOf(maxIntValue).intValue());
long maxIntValuePlusOne = Integer.MAX_VALUE + 1;
System.out.println("Long maxIntValuePlusOne to int: " + Long.valueOf(maxIntValuePlusOne).intValue());
System.out.println("Long max to int: " + Long.valueOf(Long.MAX_VALUE).intValue());
결과:
Long max: 9223372036854775807
Int max: 2147483647
Long max to int: -1
Long maxIntValue to int: 2147483647
Long maxIntValuePlusOne to int: -2147483648
직접 주조에 오류가 표시되면 다음과 같이 할 수 있다.
Long id = 100;
int int_id = (int) (id % 100000);
자바에서 긴 번호는 서명된 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
Java 8에서 나는 다음과 같은 방법으로 한다.
long l = 100L;
int i = Math.toIntExact(l);
이 방법은 효과가 있다.ArithmaticException
만일long
값이 의 범위를 초과하다int
그래서 나는 데이터 손실로부터 안전하다.
수동 형식 지정은 여기에서 수행할 수 있다.
long x1 = 1234567891;
int y1 = (int) x1;
System.out.println("in value is " + y1);
안전하게 변환하여 람다 표현과 함께 자바8을 즐겨 사용하려면 다음과 같이 사용해도 된다.
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
long x;
int y;
y = (int) x
당신은 그 숫자가 오류 없이 2147483647보다 적으면 긴 시간 동안 캐스팅할 수 있다.
나는 몇 가지 핵심 세부사항을 덧붙이고 있다.
기본적으로 Java가 하는 일은 잘리는 것이다.long
32비트가 지나면 간단한 타이프캐스팅이 그 요령을 발휘한다.
long l=100000000000000000l;
System.out.println(Long.toString(l,2));
int t=(int)l;
System.out.println(Integer.toString(t,2));
다음 출력:
101100011010001010111100001011101100010100000000000000000
1011101100010100000000000000000
을 위해l=1000000043634760000l
출력:
110111100000101101101011110111010000001110011001100101000000
-101111110001100110011011000000
만약 우리가 이것을 변환한다면-101111110001100110011011000000
적절한 두 사람의 칭찬으로 우리는 정확히 32비트 싸인을 받은 후부터 잘릴 것이다.long
.
나 또한 이 문제에 직면했다.이것을 해결하기 위해 나는 먼저 나의 긴 시간을 끈으로 변환한 후 int로 변환했다.
int i = Integer.parseInt(String.valueOf(long));
long x = 3120L; // 긴 값 take int z = x.intValue(); // 같은 방법으로 double을 int로 변환할 수 있음
그때 바로 은밀할 필요가 있다면.
longvalue.intvalue();
Long l = 100;
int i = Math.round(l);
봄에는 긴 것을 int로 변환하는 엄격한 방법이 있다.
lnog는 int로 변환할 수 있을 뿐만 아니라, 어떤 종류의 클래스든 확장될 수 있다. 일반적으로 number는 다른 number type으로 변환할 수 있다. 여기서 long을 int로 변환하는 방법을 보여줄 것이다. 다른 type은 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이야기' 카테고리의 다른 글
강력한 비동기 검증자 - 어떻게 철회할 것인가? (0) | 2022.05.13 |
---|---|
Java System.currentTimeMillis를 테스트 시간 민감 코드에 대해 재정의 (0) | 2022.05.13 |
Vue.js에서 가치를 비반복적으로 만드는 방법은? (0) | 2022.05.12 |
열거형 변수를 문자열로 변환하는 방법 (0) | 2022.05.12 |
Java.lang.반사를 일으킬 수 있는 것.호출TargetException? (0) | 2022.05.12 |