C#에서 Decimal 구조체는 10진 부동 소수점 숫자를 나타내는 값 형식입니다. Decimal은 양수 79,228,162,514,264,337,593,543,950,335부터 음수 79,228,162,514,264,337,593,543,950,335까지 매우 넓은 범위의 10진수를 표현할 수 있으며, 기본값은 0입니다.
Decimal은 float나 double 같은 2진 부동 소수점 형식과 달리 10진수 기반으로 값을 저장하기 때문에 표현 오차가 없습니다. 따라서 금융 계산처럼 소수점 아래까지 정확한 결과가 필요한 경우에 특히 적합합니다.
지금부터 Decimal 구조체에서 자주 사용되는 대표적인 메서드인 Add(), Ceiling(), Compare()를 예제 코드와 함께 살펴보겠습니다.
1. Decimal.Add() – 두 값 더하기
Decimal.Add() 메서드는 지정된 두 개의 Decimal 값을 더하고 그 합을 반환하는 정적(static) 메서드입니다.
구문
public static decimal Add (decimal val1, decimal val2);
- val1: 더할 첫 번째 decimal 값
- val2: 더할 두 번째 decimal 값
예제
다음은 Decimal.Add() 메서드를 사용해 두 개의 소수를 더하는 기본 예제입니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 3.07m;
Decimal val2 = 4.09m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Decimal res = Decimal.Add(val1, val2);
Console.WriteLine("Result (Sum) = "+res);
}
}출력 결과
Decimal 1 = 3.07 Decimal 2 = 4.09 Result (Sum) = 7.16
예제 2
이번에는 Decimal.MinValue(Decimal이 표현할 수 있는 최솟값)를 사용한 예제입니다. 최솟값에 다른 수를 더했을 때 결과가 어떻게 계산되는지 확인할 수 있습니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = Decimal.MinValue;
Decimal val2 = 8.21m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Decimal res = Decimal.Add(val1, val2);
Console.WriteLine("Result (Sum) = "+res);
}
}출력 결과
Decimal 1 = -79228162514264337593543950335 Decimal 2 = 8.21 Result (Sum) = -79228162514264337593543950327
2. Decimal.Ceiling() – 소수점 올림
Decimal.Ceiling() 메서드는 지정된 decimal 숫자보다 크거나 같은 값 중에서 가장 작은 정수를 반환합니다. 즉, 소수점 이하를 무조건 올림 처리하는 메서드입니다.
구문
public static decimal Ceiling (decimal val);
- val: 올림할 decimal 숫자
예제
양수에 대해 Ceiling() 메서드를 적용해 보겠습니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 12.85m;
Decimal val2 = 3.45m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Console.WriteLine("Ceiling (val1) = "+Decimal.Ceiling(val1));
Console.WriteLine("Ceiling (val2) = "+Decimal.Ceiling(val2));
}
}출력 결과
Decimal 1 = 12.85 Decimal 2 = 3.45 Ceiling (val1) = 13 Ceiling (val2) = 4
예제 2
음수에도 동일하게 적용해 보겠습니다. 음수의 경우에도 "더 큰 정수" 방향으로 올림된다는 점에 주목하세요. 예를 들어 -10.85는 -11이 아니라 -10이 됩니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = -10.85m;
Decimal val2 = -33.45m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Console.WriteLine("Ceiling (val1) = "+Decimal.Ceiling(val1));
Console.WriteLine("Ceiling (val2) = "+Decimal.Ceiling(val2));
}
}출력 결과
Decimal 1 = -10.85 Decimal 2 = -33.45 Ceiling (val1) = -10 Ceiling (val2) = -33
3. Decimal.Compare() – 두 값 비교
Decimal.Compare() 메서드는 지정된 두 개의 Decimal 값을 비교하고, 그 결과를 int 형식으로 반환합니다.
구문
public static int Compare (decimal val1, decimal val2);
- val1: 비교할 첫 번째 값
- val2: 비교할 두 번째 값
반환 값은 다음과 같이 해석됩니다.
- 0보다 작은 값: val1이 val2보다 작은 경우
- 0: val1과 val2가 같은 경우
- 0보다 큰 값: val1이 val2보다 큰 경우
예제
첫 번째 값이 두 번째 값보다 클 때의 비교 결과입니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 45.85m;
Decimal val2 = 35.45m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Console.WriteLine("Comparison Value = "+Decimal.Compare(val1,val2));
}
}출력 결과
Decimal 1 = 45.85 Decimal 2 = 35.45 Comparison Value = 1
예제 2
두 값이 완전히 같을 때는 0이 반환됩니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 65.15m;
Decimal val2 = 65.15m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Console.WriteLine("Comparison Value = "+Decimal.Compare(val1,val2));
}
}출력 결과
Decimal 1 = 65.15 Decimal 2 = 65.15 Comparison Value = 0
마무리
C#의 Decimal 구조체는 높은 정밀도가 필요한 10진수 연산을 위한 필수적인 값 형식입니다. 이번 글에서 살펴본 세 가지 메서드를 정리하면 다음과 같습니다.
- Decimal.Add(): 두 decimal 값의 합을 반환
- Decimal.Ceiling(): 지정된 값보다 크거나 같은 가장 작은 정수를 반환(올림)
- Decimal.Compare(): 두 값을 비교하여 음수, 0, 양수 중 하나를 반환
금융 애플리케이션, 회계 시스템, 정확한 소수 계산이 필요한 모든 상황에서 Decimal 구조체를 적극적으로 활용해 보시기 바랍니다.