HOWTO · Java

Java에서 Int를 Float로 변환

이 튜토리얼은 Java에서 정수를 float로 변환하는 방법을 보여줄 것입니다.

이 페이지의 내용

Java에서 기본형 int를 float로 변환하려면 정수를 float 변수에 대입하면 됩니다: float converted = value;. Java는 이 widening 변환을 자동으로 수행하므로 명시적인 캐스트는 필요하지 않습니다. 값이 Integer 래퍼 객체에 들어 있다면 해당 객체의 인스턴스 메서드인 floatValue()를 호출할 수도 있습니다. float의 정밀도에는 한계가 있으므로 큰 정수 값 중 일부는 변환할 때 반올림된다는 점에 유의하세요.

widening 변환으로 int를 float로 변환하기

기본형 int는 기본형 float에 바로 대입할 수 있습니다. float가 int보다 더 넓은 크기 범위의 값을 표현할 수 있으므로, Java는 대입 과정에서 값을 widening 변환합니다. 이는 숫자형 변환이지 캐스트를 작성해야 한다는 뜻은 아닙니다. 다음 완전한 프로그램은 작은 값을 사용하는 일반적인 사례를 보여 줍니다.

아래의 독립 실행형 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

public class Main {
  public static void main(String[] args) {
    int value = 56;
    float converted = value;
    System.out.println(converted);
  }
}

프로그램은 Java의 기본 float 형식으로 변환된 값을 출력합니다. 예제는 진입점이 포함된 완전한 Java 클래스이므로 작은 독립 실행형 프로그램으로 컴파일하고 실행할 수 있습니다. 변환은 value를 converted에 대입할 때 일어나며, 출력은 그 결과를 보여 줄 뿐입니다. 이미 int 형식인 변수가 있다면 바로 대입하는 방식이 가장 명확합니다.

float converted = (float) value;처럼 작성할 수도 있지만, 캐스트를 써도 변환 방식은 달라지지 않습니다. int를 float에 대입할 때는 캐스트가 중복되며, Java에서 명시적 캐스팅이 필요하다고 오해하게 만들 수 있습니다. 코드 독자에게 변환을 명시해야 할 별도의 이유가 없다면 바로 대입하는 방식을 사용하세요.

Integer 객체에서 floatValue() 사용하기

Integer는 기본형 int를 감싸는 Java 래퍼 클래스입니다. 값이 이미 Integer 객체에 들어 있다면 floatValue()는 그 값을 기본형 float로 반환합니다. 예를 들어 Integer count = Integer.valueOf(56); float converted = count.floatValue();라는 식은 래퍼에 저장된 값을 변환합니다. 여기서 floatValue()는 count를 대상으로 호출하는 인스턴스 메서드입니다.

이 래퍼 객체를 사용하는 방식은 앞서 살펴본 기본형의 직접 대입과 다릅니다. 변수가 이미 int라면 Integer의 메서드를 호출할 필요 없이 기본형 값을 바로 대입하면 됩니다. API나 컬렉션에서 Integer로 값을 받는 경우에는 floatValue()를 호출하면 언박싱과 변환이 일어나는 지점을 명확하게 드러낼 수 있습니다. Integer를 float에 대입하면 Java가 언박싱할 수도 있지만, 변환 시점을 코드에 보여 주고 싶을 때 이 메서드가 유용합니다. 이 메서드는 대상 형식의 정밀도를 높이지 않습니다. 반환값도 여전히 float이므로 동일한 정밀도 한계가 적용됩니다.

int를 float로 변환할 때의 정밀도 한계 이해하기

Java의 두 형식은 모두 32비트를 사용하지만 숫자를 표현하는 방식은 다릅니다. int는 표현 범위 내의 모든 정수를 정확히 나타냅니다. float는 부호, 지수, 가수로 값을 표현하며, 일반적인 유한 값의 경우 가수 정밀도는 24비트입니다. 따라서 모든 정수를 정확하게 표현할 수 있는 연속 범위는 −2^24부터 2^24까지입니다. 이 범위를 넘어서면 표현 가능한 값 사이의 간격이 벌어지고, 일부 정수는 가까운 float 값으로 반올림됩니다.

이 기준을 넘는 모든 변환에서 값이 달라진다는 뜻은 아닙니다. 더 큰 정수 중에도 정확히 표현되는 값이 있습니다. 핵심은 모든 정수가 정확히 표현된다고 더는 보장할 수 없다는 점입니다. widening은 Java에서 형식이 변환되는 방식을 가리키며, 대상 형식의 정밀도가 모든 원본 값을 보존하기에 충분하다는 뜻은 아닙니다.

계산이나 식별자에 int 전체 범위의 정확한 정수 값이 필요하다면 float로 변환하지 말고 int나 다른 정확한 정수 형식을 사용하세요. 소수 연산이 필요하고 큰 값에서의 반올림을 허용할 수 있다면 float가 적절할 수 있습니다. 애플리케이션에 필요한 정밀도에 따라 선택하고, 변환된 큰 값이 언제나 원래 정수와 같다고 가정해 비교하지 마세요.