부동 소수점 숫자 형식은 실수입니다. 모든 부동 소수점 숫자 형식은 값 형식입니다. 또한 간단한 형식 이며 리터럴을 사용하여 초기화할 수 있습니다. 모든 부동 소수점 숫자 형식은 산술, 비교 및 같음 연산자를 지원합니다.
부동 소수점 형식의 특징
C#은 다음과 같은 미리 정의된 부동 소수점 형식을 지원합니다.
| C# 형식/키워드 | 대략적 범위 | 정밀성 | 크기 | .NET 형식 |
|---|---|---|---|---|
float |
±1.5 x 10-45 에서 ±3.4 x 1038 | ~6-9자리 숫자 | 4바이트 | System.Single |
double |
±5.0 × 10-324 에서 ±1.7 × 10308 | ~15-17자리 숫자 | 8바이트 | System.Double |
decimal |
±1.0 x 10-28 에서 ±7.9228 x 1028 | 28-29자리 숫자 | 16바이트 | System.Decimal |
앞의 표에서 맨 왼쪽 열의 각 C# 형식 키워드는 해당 .NET 형식의 별칭입니다. 서로 교환할 수 있습니다. 예를 들어 다음 선언은 동일한 형식의 변수를 선언합니다.
double a = 12.3;
System.Double b = 12.3;
각 부동 소수점 형식의 기본값은 0 0입니다. 각 부동 소수점 형식에는 해당 형식의 MinValue 최소 및 MaxValue 최대 유한 값을 제공하는 상수와 상수가 있습니다. 및 double 형식은 float 숫자가 아닌 값과 무한대 값을 나타내는 상수도 제공합니다. 예를 들어 형식은 double 다음과 같은 상수 Double.NaN인 , Double.NegativeInfinity및 Double.PositiveInfinity.를 제공합니다.
decimal 이 형식은 소수점 오른쪽의 자릿수에 따라 필요한 정밀도를 결정할 때 적합합니다. 이러한 수치는 일반적으로 금융 애플리케이션, 통화 금액(예: $1.00), 이자율(예:%2.625) 등에 사용됩니다. 10진수로만 정확한 숫자 짝수는 0.1 형식으로 decimal 더 정확하게 처리됩니다. 예를 들어 0.1은 인스턴스로 decimal 정확하게 나타낼 수 있지만 정확히 0.1을 나타내는 인스턴스는 float 없습니다double. 숫자 형식의 이러한 차이로 인해 예기치 않은 반올림 오류는 10진수 데이터를 사용할 double 때 산술 계산에서 float 발생할 수 있습니다. 정확도를 보장하는 것보다 성능을 최적화하는 것이 더 중요한 경우 대신 decimal 사용할 double 수 있습니다. 그러나 성능의 차이는 계산 집약적 애플리케이션을 제외한 모든 애플리케이션에서 눈에 띄지 않습니다. 방지 decimal 할 수 있는 또 다른 이유는 스토리지 요구 사항을 최소화하는 것입니다. 예를 들어 ML.NET 매우 큰 데이터 집합에 대해 4바이트와 16바이트의 차이가 추가되므로 사용합니다 float . 자세한 내용은 System.Decimal를 참조하세요.
식에서 정수 계열 형식과 형식을 floatdouble 혼합할 수 있습니다. 이 경우 정수 계열 형식은 암시적으로 부동 소수점 형식 중 하나로 변환되고 필요한 float 경우 형식이 암시적으로 변환됩니다 double. 식은 다음과 같이 평가됩니다.
- 식에 형식이 있는 경우 식은
double관계형 및 같음 비교로 평가booldouble됩니다. - 식에 형식이 없
double으면 식이 관계형 및 같음 비교로 평가floatbool됩니다.
식에서 정수 계열 형식과 형식을 혼합할 decimal 수도 있습니다. 이 경우 정수 계열 형식은 암시적으로 형식으로 decimal 변환되고 식은 관계형 및 같음 비교로 계산 decimalbool 됩니다.
식의 decimal 형식과 double 형식을 float 혼합할 수 없습니다. 이 경우 산술, 비교 또는 같음 연산을 수행하려면 다음 예제와 같이 피연산자를 형식에서 또는 decimal 형식으로 명시적으로 변환해야 합니다.
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
표준 숫자 서식 문자열 또는 사용자 지정 숫자 서식 문자열을 사용하여 부동 소수점 값의 서식을 지정할 수 있습니다.
real 리터럴
실제 리터럴의 형식은 다음과 같이 접미사로 결정됩니다.
- 접미사가 없거나 접미사가 있는
dD리터럴이 형식입니다.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
변환
부동 소수점 숫자 형식 floatdouble간에는 암시적 변환이 하나만 있습니다. 그러나 명시적 캐스트를 사용하여 모든 부동 소수점 형식을 다른 부동 소수점 형식으로 변환할 수 있습니다. 자세한 내용은 기본 제공 숫자 변환을 참조하세요.
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.
참고하십시오
.NET