본문 바로가기

코딩/Java

자바 - float 변수에 실수 값을 그냥 넣으면 에러 나는 이유

반응형

목차

문제

public class Main {
	public static void main(String[] args) {
		float number = 1.1;
	}
}

데이터 타입이 floatnumber라는 변수에 실숫값 1.1을 할당해 보자.

 

 

 

example.java:3: error: incompatible types: possible lossy conversion from double to float
		float number = 1.1;
		               ^
1 error
error: compilation failed

shell returned  

number라는 변수의 데이터 타입이 실수(float)인데 실숫값이 할당이 안된다???

 

 

 

이유

위에 에러 내용을 보면, double 형태에서 float 형태로 변환 시, 데이터 손실이 일어날 수 있다고 한다.

(즉 1.1라는 값의 데이터 타입이 double인데 float 데이터 타입인 변수 number에 할당 시 데이터 손실 가능성 때문에 에러 발생)

 

 

아래 예제를 통해 실제로 1.1라는 실숫값이 double 데이터 타입인지 알아보자.

 

public class Main {
	private static void printVariableType(float number) {
		System.out.println("float");
	}

	private static void printVariableType(double number) {
		System.out.println("double");
	}

	public static void main(String[] args) {
		printVariableType(1.1);
	}
}

printVariableType() 함수에 1.1라는 값을 인수로 넣어 호출해 보자.

 

만약 1.1라는 값의 데이터 타입이 float 이면 -> float을 출력.

만약 1.1라는 값의 데이터 타입이 double 이면 -> double을 출력.

 

 

 

double

결과: 1.1라는 값의 데이터 타입은 double이다.

 

 

정리하자면

1.1라는 실숫값을,

double 데이터 타입인 변수에 바로 할당이 가능하지만, 예: double x = 1.1;

float 데이터 타입인 변수에 할당 전, 1.1의 데이터 타입을 float으로 명시하는 조치가 필요하다.

 

 

 

해결책

만약 1.1라는 값을 float 데이터 타입으로 명시하고 싶으면, 값 마지막에 f를 붙이면 된다, 예: 1.1f

 

 

public class Main {
	public static void main(String[] args) {
		float number = 1.1f;
	}
}

1.1라는 값이 float 데이터 타입으로 명시되어 정상적으로 number라는 변수에 할당이 됐다.

반응형