IT이야기

Java에서 long을 int로 변환하려면 어떻게 해야 하는가?

cyworld 2022. 5. 12. 22:03
반응형

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, 그래서 완벽하게 변환할 수 없다.longint, 일반적인 경우.만약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.toIntExactJDK 8의 경우:

public static int toIntExact(long value) {
    if ((int)value != value) {
        throw new ArithmeticException("integer overflow");
    }
    return (int)value;
}

Guava 라이브러리를 사용하는 경우, 변환 방법 및 변환 방법이 있다.longint.

long x = 3;
int y = (int) x;

그러나 그것은 그 다음이 될 것이라고 가정한다.long라고 표현할 수 있다.int너는 그 둘의 차이점을 아니?

당신은 그것을 사용할 수 있다.Long대신에 포장하다long원시적인

Long.intValue()

Java7 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가 하는 일은 잘리는 것이다.long32비트가 지나면 간단한 타이프캐스팅이 그 요령을 발휘한다.

    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);

길게 int로 환산하다.

참조URL: https://stackoverflow.com/questions/4355303/how-can-i-convert-a-long-to-int-in-java

반응형