티스토리 뷰

JAVA/JAVA

[JAVA] 강제 타입 변환

TORO_0513 2021. 9. 6. 22:05
반응형

1. 강제 타입 변환 시 안전하게 값을 보존될 수 있도록 검사하는 방법

// 강제 타입 변환으로 인한 데이터 손실을 발생되지 않도록 함 
public class CheckValueBeforeCasting {
	public static void main(String[] args) {
		
		int i = 129;
		
		if((i<Byte.MIN_VALUE) || (i>Byte.MAX_VALUE)) { //(i<-128)||(i>127) 
			System.out.println("byte 타입으로 변환할 수 없습니다.");
			System.out.println("값을 다시 확인해주세요.");
		} else {
			byte b = (byte) i;
			System.out.println(b);
		}
		
	}
}

 

※ 기본 타입의 최대값, 최소값 상수 (boolean, char 제외)

기본 타입 최대값상수 최소값상수
byte  Byte.MAX_VALUE Byte.MIN_VALUE
short Short.MAX_VALUE Short.MIN_VALUE
int Integer.MAX_VALUE Integer.MIN_VALUE
long Long.MAX_VALUE Long.MIN_VALUE
float Float.MAX_VALUE Float.MIN_VALUE
double Double.MAX_VALUE Double.MIN_VALUE

2. 정수 타입을 실수 타입으로 변환할 때 정밀도 손실을 피하는 방법

//정수 타입을 실수 타입으로 변환할 때 정밀도 손실을 피
public class FromIntToDouble {
	public static void main(String[] args) {
		int num1 = 123456780;
		int num2 = 123456780;
		
		float num3 = num2;
		num2 = (int) num3;
		
		int result = num1 - num2;
		System.out.println(result); //-4
		
		/*
		 * int 값을 손실 없이 float 타입의 값으로 변환하려면 가수 23비트로 표현가능한 
		 * 123456780 값은 23비트로 표현할수 없음
		 * 그렇기 때문에 float 값을 다시 int 타입으로 변환하면 원래의 int값을 얻지 못함
		 * 
		 * 해결책은 모든 int값을 실수 타입으로 안전하게 변환시키는 double타입을 사용하는 것 
		 * 
		 * float 	: 부호(1비트) + 지수(8비트) + 가수(23비트)
		 * double 	: 부호(1비트) + 지수(11비트) + 가수(52비트)  
		 */
		
		int num4 = 123456780;
		int num5 = 123456780;
		
		double num6 = num5;
		num5 = (int) num6;
		
		int result2 = num4 - num5;
		System.out.println(result2);
		
	}
}

 


* 도서 '이것이 자바다' 참조

반응형

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] 패키지  (0) 2021.12.02
[JAVA] 데이터 타입 분류  (0) 2021.10.05
[JAVA] 데이터 타입 - 기본(원시:primitive) 타입  (0) 2021.09.04
댓글