Introduction
- 모든 부동 소수점 형식은 값 형식이다.
- 정수 형식과 달리 모든 부동 소수점 형식은 음수를 가질 수 있다.
- 모든 부동 소수점 형식은
산술
,등호
,비교
연산을 지원한다. - 모든 부동 소수점 형식의 기본값은
0
이다.
부동 소수점 형식
C# 키워드 | .NET 형식 | 값 범위 | 전체 자릿수 | 크기 (byte) | 비고 |
---|---|---|---|---|---|
float | System.Single | ±1.5*10−45 ~ ±3.4*1038 | ~ 6 - 9 | 4 | --- |
double | System.Double | ±5.0*10−324 ~ ±1.7*10308 | ~ 15 - 17 | 8 | 부동 소수점 리터럴 초기화 시 기본값 |
decimal | System.Decimal | ±1.0*10−28 ~ ±7.9228*1028 | 28 - 29 | 16 | --- |
- 모든 부동 소수점 형식 키워드는 .NET 형식의 별칭으로, 서로 바꿔 사용 가능하다.
double a = 1.5; System.Double b = 1.5;
- 모든 부동 소수점 형식에는
MinValue
,MaxValue
프로퍼티가 컴파일 타임 상수로 제공된다. float
,double
형식에는 숫자가 아닌 값 또는 무한 값을 나타내는 상수를 제공한다.- NaN : Not a Number를 의미한다.
- NegativeInfinity : 음의 무한대를 의미한다.
- PositiveInfinity : 양의 무한대를 의미한다.
- 소수점 이하 자릿수 값의 정확성 중요한 경우,
decimal
형식이 적합하다.0.1
이라는 수를 정확하게 표현해야 할 경우,float
과double
은 불가능하여decimal
을 사용한다.
- 규모가 큰 DB를 다루는 경우에는 가능한 작은 크기의 형식을 사용한다.
부동 소수점 초기화
부동 소수점 초기화 시
_
를 이용하여 자리를 구분할 수 있고,E
를 사용하여 지수부 표현을 할 수 있다.부동 소수점 초기화 또는 연산 시 값이
{형식}.MinValue
보다 작으면-∞
,{형식}.MaxValue
보다 크면∞
가 된다.var testReal = 1_000.12_3; // 1000.123 var testReal1 = 1E4; // 10000 var testReal2 = double.MaxValue * 2; // ∞ var testReal3 = float.MinValue * 2; // -∞
리터럴을 이용한 초기화 시에는 접미사에 따라 형식이 결정된다.
float :
F
또는f
double : 접미사가 없거나
D
또는d
decimal :
M
또는m
var floatValue = 0.1F; var doubleValue = 0.1; var doubleValue2 = 0.1D; var decimalValue = 0.1M;
부동 소수점 형식 변환 (캐스팅)
부동 소수점 형식 변환 간 암시적 변환은
float
->double
만 지원된다.명시적 변환을 이용하여 부동 소수점 형식 변환을 수행한다. 이 때, 캐스트 식을 사용한다.
부동 소수점 형식을 정수 형식으로 변환하는 경우 소수점 자리 반올림 오류가 발생할 수 있다. (기본적으로 버림 처리한다)
double castingDouble = 1.6; int castingInt = (int)castingDouble; // castingInt = 1 double castingDouble2 = 1.5; int castingInt2 = (int)Math.Round(castingDouble2); // castingInt2 = 2
부동 소수점 연산
모든 부동 소수점 형식은 정수 형식과 연산이 가능하다.
float
형식은 필요한 경우 암시적으로double
로 변환된다.var X = 1.0F + 2; // X = 3.0F var Y = 1.0D + 2; // Y = 3.0D var Z = 1.0M + 2; // Z = 3.0M
float
형식과double
형식은 연산이 가능하다.float
형식이 암시적으로double
로 변환된다.var X = 1.0F + 2.0D; // X = 3.0D
decimal
형식은float
및double
형식과 연산이 불가하다.명시적으로
decimal
을대상 형식
으로 또는 반대로 변환해야한다.double X = 1.0; decimal Y = 1M; double Z = X + (double)Y; decimal W = (decimal)X + Y;