🏃♀️ Do it !/TIL
실수형 타입 / 형변환
버터감자
2022. 9. 5. 09:35
728x90
2022 / 9 / 5 월
- 실수형 타입
- 형변환
✔️실수형 타입 ( float, double )
float & double
- 정수 타입과는 다른 저장 방식 떄문에 정수 타입보다 훨씬 큰 범위의 값 저장 가능.
- 부동 소수점 ( floating - point ) 방식으로 저장
실수값 저장. float(4) , double(8) 기본은 더블
3.14 / 3.14d / 3.14D 동일한 double 실수형 데이터 타입 표현 8byte크기
double var1 = 3.14D;
4byte의 기억장소에 3.14 8 byte크기의 데이터를 저장 (대입) 할 수가 없다.
float var2 = 3.14; -> 에러
float var3 = 3.14F;
정밀도 테스트
double var4 = 0.1234579883297897932793;
float var5 = 0.1239491798643956983759F;
System.out.println("var1: " + var1);
System.out.println("var3: " + var3);
System.out.println("var4: " + var4);
System.out.println("var5: " + var5);
e사용하기
int var6 = 3000000;
double var7 = 3e6;
float var8 = 3e6F;
double var9 = 2e-3; // 2의 10-3승
System.out.println("var6: " + var6);
System.out.println("var7: " + var7);
System.out.println("var8: " + var8);
System.out.println("var9: " + var9);
✔️형변환
1) 자동형변환(promotion)
- 작은 데이터타입의 값을 큰 데이터타입의 변수로 저장시 형변환을 하지않고, 자동처리
숫자형 데이터타입 크기
정수형 데이터타입보다는 실수형 데이터타입이 더 큰 개념으로 정의되어 있다.
byte < short ( char ) < int < long < float < double
작은 데이터타입의 값을 큰 데이터타입의 기억장소에 자동으로 형변환과정이 일어나 저장이 이루어진다.
변수 = 값;
값이 좌측의 변수 타입에 맞게 형변환이 일치해야한다. (타입일치)
byte bytevalue = 10;
// int > byte
int intvalue = bytevalue; // 자동형변환
System.out.println(intvalue);
char charvalue = '가';
intvalue = charvalue;
System.out.println("가의 유니코드 = " + intvalue);
intvalue = 500;
// intvalue 변수의 값을 읽어와서, 좌측의 변수 데이터타입 long형으로 변화되어, 값이 대입된다.
long longvalue = intvalue;
System.out.println(longvalue);
intvalue = 200;
double doublevalue = intvalue;
System.out.println(doublevalue);
2) 명시적형변환(Casting)
- 큰 데이터타입의 값을 작은 데이터타입의 변수로 저장시 형변환작업을 명시적으로 해야한다
우측이 큰 데이터타입일경우는 자동형변환이 발생되지 않는다.
= 기준으로 우측의 값이 좌측의 타입과 일치를 하고, 대입된다 ( 타입일치 )
int intValue = 44032;
// 정수값을 문자로 표현할 경우에는 char데이터 타입을 변환시켜야한다.
char charValue = (char) intValue;
System.out.println(charValue);
long longvalue = 500;
intValue = (int) longvalue;
System.out.println(intValue);
double doubleValue = 3.64;
intValue = (int) doubleValue; // int형으로 변환되면서, 반올림없이 소수부분은 제거된다.
System.out.println(intValue);