부동소수점 숫자를 나타내는 데이터 형식 중 하나이다. 

 

float

32비트의 고정된 크기를 가지며 숫자의 소수점 이하 7자리까지 정밀도를 가지고 있다.

실수 리터럴을 표현할 때 컴파일러가 float으로 인식하게 하려면 숫자 뒤에 f 또는 F를 붙여야 한다.

float a = 1.0f
float b = 1.0F

double

float보다 더 큰 범위의 수를 저장할 수 있으며 64비트 부동소수점 형식을 사용하여 약 15~16자리의 정밀도를 가진다. 하지만 이론적으로는 무한한 자릿수까지 표현이 가능하며 더 정밀한 값을 표현하기 위해서는 decimal을 사용해야 한다.

 

* decimal의 경우 높은 정밀도를 제공하지만 128비트 크기로 계산 속도가 느리기 때문에 성능이 중요한 경우에는 사용에 주의가 필요하다.

 

double d = 1.0d;
double e = 1.0;

double을 사용할 때는 접미사 d를 생략할 수 있다. 또한 double 형에 1.0f 처럼 float 값을 넣어도 암시적 형변환이 이루어져 허용이되지만 반대의 경우는 에러가 발생한다.

double d = 1.0f;	// implicitly convert
float a = 1.0d; 	// error

 

float보다 double이 더 많은 소수점 자릿수의 표현이 가능하지만 메모리의 크기가 차이가 나기 때문에 꼭 필요한 상황에서만 double을 사용하며 이외의 소수점을 사용할때는 float을 사용하는 것이 좋다.

 

 

728x90
반응형

decimal

부동 소수점과 다르게 고정 소수점 숫자를 나타내는 자료형이다. 정확한 소수점 계산이 필요한 금융, 세금, 계산 등과 같은 분야에서는 decimal을 자주 사용한다.

 

최대 28자리의 숫자를 나타낼 수 있으며 부호, 정수, 소수점, 소수점 이하 자릿수를 나타내는 4바이트 정수형 정수부와 소수부를 나타내는 4바이트 정수형 소수부 그리고 소수점 위치를 나타내는 4바이트 정수형 지수부 등으로 구성된다.

 

decimal balance = 100.50m;
decimal withdrawalAmount = 20.25m;
decimal newBalance = balance - withdrawalAmount;
Console.WriteLine($"New balance : {newBalance:C}");
// balance : 기존 잔액
// withdrawalanceAmount : 출금액
// newBalance : 출금 후 잔액

// New balance: $80.25 출력

decimal을 사용할 때는 m으로 끝나는 접미사를 사용해서 변수를 선언해야 한다.

 

소수점 자릿수가 다른 경우의 계산에서는 더 적은 숫자와 같은 자릿수로 맞춘 후 계산이 된다.

 

decimal d1 = 100.123m;
decimal d2 = 10.1m;

// d1 + d2 = 110.223m

만약 자릿수를 맞추어도 계산이 불가능한 경우에는 OverflowException이 발생한다. 따라서 숫자를 계산할 때는 소수점 자릿수를 유의하여 맞추는 것이 좋다.

728x90
반응형

+ Recent posts