C#의 Decimal.Subtract() 메서드는 지정된 두 개의 Decimal 값의 차(뺄셈 결과)를 계산하는 데 사용되는 정적 메서드입니다. 금융 계산처럼 높은 정밀도가 필요한 경우에 유용하게 활용할 수 있습니다.
구문
기본 구문은 다음과 같습니다.
public static decimal Subtract (decimal val1, decimal val2);
여기서 각 매개변수의 의미는 다음과 같습니다.
- val1: 피감수(빼어지는 수)
- val2: 감수(빼는 수)
예제 1: 기본 사용법
다음은 Decimal.Subtract() 메서드로 두 Decimal 값을 빼는 기본적인 예제입니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 3.45m;
Decimal val2 = 2.35m;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Decimal res = Decimal.Subtract(val1, val2);
Console.WriteLine("Result (Subtract) = "+res);
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Decimal 1 = 3.45 Decimal 2 = 2.35 Result (Subtract) = 1.10
예제 2: 오버플로우 예외 발생 사례
이번에는 연산 결과가 Decimal 타입이 표현할 수 있는 범위를 벗어나는 경우를 살펴보겠습니다. 아래 예제에서는 Decimal.MinValue에서 양수를 빼는 상황으로, 결과값이 허용 범위를 초과하여 예외가 발생합니다.
using System;
public class Demo {
public static void Main(){
Decimal val1 = 2.35m;
Decimal val2 = Decimal.MinValue;
Console.WriteLine("Decimal 1 = "+val1);
Console.WriteLine("Decimal 2 = "+val2);
Decimal res = Decimal.Subtract(val1, val2);
Console.WriteLine("Result (Subtract) = "+res);
}
}출력 결과
위 코드를 실행하면 결과값이 Decimal의 표현 범위(약 ±7.92 × 1028)를 초과하여 System.OverflowException이 발생합니다.
Decimal 1 = 2.35
Decimal 2 = -79228162514264337593543950335
Run-time exception (line 13): Value was either too large or too small for a Decimal.
Stack Trace:
[System.OverflowException: Value was either too large or too small for a Decimal.]
at System.Decimal.FCallAddSub(Decimal& d1, Decimal& d2, Byte bSign)
at System.Decimal.Subtract(Decimal d1, Decimal d2)
at Demo.Main() :line 13정리
Decimal.Subtract() 메서드는 두 Decimal 값의 차를 정확하게 계산해 주지만, 연산 결과가 Decimal 타입의 최솟값(-79228162514264337593543950335) 또는 최댓값(79228162514264337593543950335) 범위를 벗어나면 OverflowException이 발생한다는 점에 유의해야 합니다. 따라서 큰 수를 다루는 연산에서는 예외 처리(try-catch)를 함께 구현하는 것이 안전합니다.