C#/C#_기초강의

(C#) 자료형: 실수 형식(부동소수점 형식) Floating-point numeric

코딩ABC 2023. 4. 20. 06:37
반응형

부동 소수점 형식(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);
   }

실수 형식의 자료

 

 

반응형