다음을 통해 공유


부동 소수점 숫자 형식(C# 참조)

부동 소수점 숫자 형식은 실수입니다. 모든 부동 소수점 숫자 형식은 값 형식입니다. 또한 간단한 형식 이며 리터럴을 사용하여 초기화할 수 있습니다. 모든 부동 소수점 숫자 형식은 산술, 비교같음 연산자를 지원합니다.

부동 소수점 형식의 특징

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.NegativeInfinityDouble.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# 언어 사양의 다음 섹션을 참조하세요.

참고하십시오