Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 float, double, decimal의 차이점 완벽 정리

C#에서 float, double, decimal은 모두 값 형식(Value Type)에 해당하는 숫자 데이터 타입입니다. 세 가지 타입은 모두 실수를 다룰 수 있지만, 메모리 크기, 정밀도, 표현 범위에서 중요한 차이가 있어 용도에 맞게 선택하는 것이 매우 중요합니다.

C#의 값 형식(Value Type)이란?

값 형식 변수는 값을 직접 할당할 수 있는 타입으로, System.ValueType 클래스에서 파생됩니다. 참조 형식과 달리 값 형식은 데이터 자체를 스택(Stack) 메모리에 직접 저장하므로 접근 속도가 빠르고 관리가 단순합니다.

float — 32비트 단정밀도 부동 소수점

float는 32비트 단정밀도(single-precision) 부동 소수점 타입으로, 약 ±3.4 × 1038까지의 범위를 표현할 수 있습니다.

  • 메모리 크기: 4바이트
  • 유효 자릿수: 약 6~9자리
float a = 3.5f;

float 리터럴을 사용할 때는 반드시 숫자 뒤에 f 또는 F 접미사를 붙여야 합니다. 접미사를 생략하면 컴파일러는 해당 값을 double로 해석하기 때문에 컴파일 오류가 발생합니다.

double — 64비트 배정밀도 부동 소수점

double은 64비트 배정밀도(double-precision) 부동 소수점 타입으로, ±5.0 × 10-324부터 ±1.7 × 10308까지 매우 넓은 범위를 표현할 수 있습니다.

  • 메모리 크기: 8바이트
  • 유효 자릿수: 약 15~17자리
double d = 5.78788;

C#에서 실수 리터럴의 기본 타입이 double이기 때문에 별도의 접미사 없이 사용할 수 있습니다. 과학 계산, 그래픽 처리 등 일반적인 실수 연산에는 double이 가장 널리 사용됩니다.

decimal — 128비트 고정밀 십진수

decimal은 128비트 정밀한 십진수 타입으로, 28~29자리의 유효 숫자를 지원하며 범위는 ±7.9 × 1028입니다.

  • 메모리 크기: 16바이트
  • 유효 자릿수: 28~29자리
decimal d = 1.0M;

decimal 리터럴에는 M 또는 m 접미사를 붙여야 합니다. decimal은 이진 기반인 float와 double과 달리 십진수 기반으로 동작하므로 0.1 같은 값을 오차 없이 정확하게 표현할 수 있습니다. 따라서 금융 계산, 회계 처리 등 정확성이 필수적인 분야에서 반드시 사용해야 합니다.

세 가지 타입 비교 요약

구분floatdoubledecimal
메모리 크기4바이트8바이트16바이트
비트 수32비트64비트128비트
유효 자릿수약 6~9자리약 15~17자리28~29자리
접미사f / F없음(기본값)m / M
주요 용도메모리 절약이 필요한 경우일반적인 실수 연산금융·회계 등 정확한 계산

어떤 타입을 선택해야 할까?

일반적인 수학 연산이라면 성능과 범위 면에서 유리한 double을 권장합니다. 메모리 제약이 큰 환경(대량의 배열 처리 등)에서는 float가 적합하고, 돈과 관련된 계산처럼 작은 오차도 허용되지 않는 경우에는 반드시 decimal을 사용해야 합니다.