부동 소수점 숫자 형식(C# 참조)Floating-point numeric types (C# reference)

부동 소수점 숫자 형식은 실수를 나타냅니다.The floating-point numeric types represent real numbers. 모든 부동 소수점 숫자 형식은 값 형식입니다.All floating-point numeric types are value types. 이것은 기본 형식이기도 하며, 리터럴로 초기화할 수 있습니다.They are also simple types and can be initialized with literals. 모든 부동 소수점 숫자 형식은 산술, 비교같음 연산자를 지원합니다.All floating-point numeric types support arithmetic, comparison, and equality operators.

부동 소수점 형식의 특성Characteristics of the floating-point types

C#은 다음과 같은 미리 정의된 부동 소수점 형식을 지원합니다.C# supports the following predefined floating-point types:

C# 형식/키워드C# type/keyword 근사 범위Approximate range 전체 자릿수Precision SizeSize .NET 형식.NET type
float ±1.5 x 10−45 ~ ±3.4 x 1038±1.5 x 10−45 to ±3.4 x 1038 ~6-9개 자릿수~6-9 digits 4바이트4 bytes System.Single
double ±5.0 × 10−324 ~ ±1.7 × 10308±5.0 × 10−324 to ±1.7 × 10308 ~15-17개 자릿수~15-17 digits 8바이트8 bytes System.Double
decimal ±1.0 x 10-28 ~ ±7.9228 x 1028±1.0 x 10-28 to ±7.9228 x 1028 28-29개의 자릿수28-29 digits 16바이트16 bytes System.Decimal

이전 표에서 맨 왼쪽 열의 각 C# 형식 키워드는 해당하는 .NET 형식의 별칭입니다.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. 서로 교환하여 사용할 수 있습니다.They are interchangeable. 예를 들어 다음 선언은 동일한 형식의 변수를 선언합니다.For example, the following declarations declare variables of the same type:

double a = 12.3;
System.Double b = 12.3;

각 부동 소수점 형식의 기본값은 0입니다.The default value of each floating-point type is zero, 0. 각 부동 소수점 형식에는 해당 형식의 최소 및 최대 유한값을 제공하는 MinValueMaxValue 상수가 있습니다.Each of the floating-point types has the MinValue and MaxValue constants that provide the minimum and maximum finite value of that type. 또한 floatdouble 형식은 숫자가 아닌 무한 값을 나타내는 상수를 제공합니다.The float and double types also provide constants that represent not-a-number and infinity values. 예를 들어 double 형식은 Double.NaN, Double.NegativeInfinityDouble.PositiveInfinity와 같은 상수를 제공합니다.For example, the double type provides the following constants: Double.NaN, Double.NegativeInfinity, and Double.PositiveInfinity.

decimal 형식은 floatdouble보다 정밀도가 높고 범위가 작으므로 재무 및 통화 계산에 적합합니다.Because the decimal type has more precision and a smaller range than both float and double, it's appropriate for financial and monetary calculations.

식에서 정수 형식과 floatdouble 형식을 혼합할 수 있습니다.You can mix integral types and the float and double types in an expression. 이 경우 정수 형식이 암시적으로 부동 소수점 형식 중 하나로 변환되며, 필요한 경우 float 형식이 암시적으로 double로 변환됩니다.In this case, integral types are implicitly converted to one of the floating-point types and, if necessary, the float type is implicitly converted to double. 이 식은 다음과 같이 계산됩니다.The expression is evaluated as follows:

  • 식에 double 형식이 있는 경우 식은 관계형 및 같음 비교에서 double 또는 bool로 계산됩니다.If there is double type in the expression, the expression evaluates to double, or to bool in relational and equality comparisons.
  • 식에 double 형식이 없는 경우 식은 관계형 및 같음 비교에서 float 또는 bool로 계산됩니다.If there is no double type in the expression, the expression evaluates to float, or to bool in relational and equality comparisons.

식에서 정수 형식과 decimal 형식을 혼합할 수도 있습니다.You can also mix integral types and the decimal type in an expression. 이 경우 정수 형식은 암시적으로 decimal 형식으로 변환되고 식은 관계형 및 같음 비교에서 decimal 또는 bool로 계산됩니다.In this case, integral types are implicitly converted to the decimal type and the expression evaluates to decimal, or to bool in relational and equality comparisons.

식에서 decimal 형식을 floatdouble 형식과 혼합할 수 없습니다.You cannot mix the decimal type with the float and double types in an expression. 이 경우 산술, 비교 또는 같음 연산을 수행하려면 다음 예제와 같이 명시적으로 피연산자를 decimal 형식으로 변환하거나 반대로 변환해야 합니다.In this case, if you want to perform arithmetic, comparison, or equality operations, you must explicitly convert the operands either from or to the decimal type, as the following example shows:

double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);

표준 숫자 서식 문자열 또는 사용자 지정 숫자 서식 문자열을 사용하여 부동 소수점 값의 형식을 지정할 수 있습니다.You can use either standard numeric format strings or custom numeric format strings to format a floating-point value.

real 리터럴Real literals

real 리터럴의 형식은 접미사로 다음과 같이 결정됩니다.The type of a real literal is determined by its suffix as follows:

  • 접미사가 없거나 d 또는 D 접미사가 있는 리터럴은 double 형식입니다.The literal without suffix or with the d or D suffix is of type double
  • f 또는 F 접미사가 있는 리터럴은 float 형식입니다.The literal with the f or F suffix is of type float
  • m 또는 M 접미사가 있는 리터럴은 decimal 형식입니다.The literal with the m or M suffix is of type decimal

다음 코드에서는 각 예제를 보여 줍니다.The following code demonstrates an example of each:

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;

앞의 예제에서는 C# 7.0부터 지원되는 숫자 구분 기호_를 사용하는 방법도 보여 줍니다.The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. 모든 종류의 숫자 리터럴에서 숫자 구분 기호를 사용할 수 있습니다.You can use the digit separator with all kinds of numeric literals.

또한 다음 예제와 같이 과학적 표기법을 사용하여 real 리터럴의 지수 부분을 지정할 수도 있습니다.You can also use scientific notation, that is, specify an exponent part of a real literal, as the following example shows:

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

변환Conversions

부동 소수점 숫자 형식 간의 암시적 변환은 float에서 double로의 암시적 변환 하나뿐입니다.There is only one implicit conversion between floating-point numeric types: from float to double. 그러나 명시적 캐스트를 사용하여 부동 소수점 형식을 다른 부동 소수점 형식으로 변환할 수 있습니다.However, you can convert any floating-point type to any other floating-point type with the explicit cast. 자세한 내용은 기본 제공 숫자 변환을 참조하세요.For more information, see Built-in numeric conversions.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.For more information, see the following sections of the C# language specification:

참조See also