부동 소수점 형식(floating-point numeric types)은 실수를 나타냅니다. 모든 부동 소수점 형식은 값 형식(value types)에 속합니다.
다음은 부동 소수점 형식의 자료형입니다.
자료형 | 근사 범위 | 전체 자릿수 | 크기 | .NET 형식 |
float | ±1.5 x 10−45 ~ ±3.4 x 1038 | ~6-9개 | 4 bytes | System.Single |
double | ±5.0 × 10−324 ~ ±1.7 × 10308 |
~15-17개 | 8 bytes | System.Double |
decimal | ±1.0 x 10-28 ~ ±7.9228 x 1028 | 28-29개 | 16 bytes | System.Decimal |
C#의 자료형은 .NET 형식의 별칭입니다. 서로 교환하여 사용할 수 있습니다. 예를 들어, 다음 선언은 동일한 변수의 선언입니다.
double a = 12.345; System.Double b = 12.345; |
각 부동 소수점 형식에는 최소 및 최대값을 나타내는 MinValue와 MaxValue 상수가 있습니다.
필요한 전체 자릿수를 소수점 이하 자릿수에 따라 결정하는 경우에는 decimal 형식이 적합합니다. 이러한 숫자는 일반적으로 재무 애플리케이션에서 통화 금액(예: $1.00), 이자율(예: 2.625%) 등에 사용됩니다.
소수점 한 자리 숫자인 경우에도 decimal 형식에서 더 정확하게 처리됩니다. 예를 들어 0.1은 decimal 인스턴스로 정확하게 표현될 수 있지만 0.1을 정확히 표현하는 double 또는 float 인스턴스는 없습니다. 10진 데이터에 double 또는 float를 사용하는 경우 숫자 형식의 차이로 인해 산술 계산에서 예기치 않은 반올림 오류가 발생할 수 있습니다. 성능 최적화가 정확성을 보장하는 것보다 중요한 경우 decimal 대신 double을 사용할 수 있습니다.
식에서 정수 형식과 decimal 형식을 혼합할 수도 있습니다. 정수 형식은 암시적으로 decimal 형식으로 변환되고 식은 관계형 및 같음 비교에서 decimal 또는 bool로 계산됩니다.
식에서 decimal 형식을 float 및 double 형식과 혼합할 수 없습니다.
산술, 비교 또는 같음 연산을 수행하려면 다음 예제와 같이 명시적으로 피연산자를 decimal 형식으로 변환하거나 반대로 변환해야 합니다.
double a = 1.0; decimal b = 2.1m; Console.WriteLine(a + (double)b); Console.WriteLine((decimal)a + b); |
실수형 리터럴
실수 형식의 리터럴은 접미사로 다음과 같이 결정됩니다.
· 접미사가 없거나 d 또는 D 접미사가 있는 리터럴은 double 형식입니다. · f 또는 F 접미사가 있는 리터럴은 float 형식입니다. · m 또는 M 접미사가 있는 리터럴은 decimal 형식입니다. |
다음 코드에서는 각 예제를 보여 줍니다.
double d = 3D; d = 4d; d = 3.934_001; float f = 3_000.5F; f = 5.4f; decimal myMoney = 3_000.5m; myMoney = 400.75M; |
다음과 같이 지수 형식의 리터럴을 사용할 수도 있습니다.
double d = 0.42e2; Console.WriteLine(d); // output 42 float f = 134.45E-2f; Console.WriteLine(f); // output: 1.3445 decimal m = 1.5E6m; Console.WriteLine(m); // output: 1500000 |
형식 변환
부동 소수점 숫자 형식 간의 암시적 변환은 float에서 double로의 암시적 변환 하나뿐입니다. 그러나 명시적 캐스트를 사용하여 부동 소수점 형식을 다른 부동 소수점 형식으로 변환할 수 있습니다.
float a = 3.0; // 오류 -- double 형식이 float 형식으로 자동 변환되지 않습니다. decimal b = 3.14M; double c = b; // 오류 -- decimal 형식이 double 형식으로 자동 변환되지 않습니다. deuble c = (double)b; // Type Casting |
static void Main(string[] args)
{
float f = 99.876F;
double d = 1234567890.12345;
decimal m = 1234567890123456789012345.6789M;
Console.WriteLine(f);
Console.WriteLine("{0}", d);
Console.WriteLine("{0:N}", d); // 천단위마다 컴마(,), 소수 2자리
Console.WriteLine("{0:F}", d); // 소수 2자리
Console.WriteLine("{0:N5}", d); // 천단위마다 컴마(,), 소수 5자리
Console.WriteLine("{0:F5}", d);
Console.WriteLine("{0}", m);
Console.WriteLine("{0:N4}", m);
}
'C# > C#_기초강의' 카테고리의 다른 글
(C#) 자료형: bool (0) | 2023.04.20 |
---|---|
(C#) 값 형식과 참조 형식 reference types and value types (0) | 2023.04.20 |
(C#) 프로젝트 생성하기: C# 시작하기, 실습 하는 방법, 최상위문 (0) | 2023.04.20 |
(C#) 자료형: 정수 형식 Integral numeric types (0) | 2023.04.20 |
(C#) 개발도구 비주얼스튜디오 다운로드 및 설치 (0) | 2023.04.20 |