C#의 Decimal.ToUInt16() 메서드는 지정된 Decimal(10진수) 값을 동일한 크기의 16비트 부호 없는 정수(ushort)로 변환하는 데 사용됩니다.
문법(Syntax)
이 메서드의 기본 문법은 다음과 같습니다.
public static ushort ToUInt16 (decimal val);
매개변수 val은 16비트 부호 없는 정수로 변환할 decimal 숫자를 의미합니다.
주요 특징
Decimal.ToUInt16() 메서드를 사용할 때 알아두면 좋은 특징은 다음과 같습니다.
- 소수점 이하 값은 반올림되지 않고 0을 향해 잘려나갑니다(truncation).
- 변환하려는 값이 0 ~ 65,535 범위를 벗어나면 OverflowException이 발생합니다.
- 음수 값 역시 허용되지 않으므로 예외가 발생합니다.
예제 1
다음은 Decimal.ToUInt16() 메서드를 구현한 첫 번째 예제입니다.
using System;
public class Demo {
public static void Main(){
Decimal val = 875.647m;
Console.WriteLine("Decimal 값 = "+val);
ushort res = Decimal.ToUInt16(val);
Console.WriteLine("16비트 부호 없는 정수 = "+res);
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Decimal 값 = 875.647 16비트 부호 없는 정수 = 875
소수점 이하인 .647이 버려지고 정수 부분인 875만 반환된 것을 확인할 수 있습니다.
예제 2
이번에는 1보다 작은 소수를 변환하는 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(){
Decimal val = 0.001m;
Console.WriteLine("Decimal 값 = "+val);
ushort res = Decimal.ToUInt16(val);
Console.WriteLine("16비트 부호 없는 정수 = "+res);
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Decimal 값 = 0.001 16비트 부호 없는 정수 = 0
0.001처럼 1보다 작은 값은 정수 부분이 없기 때문에 0으로 변환됩니다.
정리
Decimal.ToUInt16() 메서드는 decimal 값을 ushort 타입으로 손쉽게 변환해 주지만, 소수점 이하가 잘리고 음수 또는 65,535 초과 값에서는 예외가 발생한다는 점을 항상 염두에 두어야 합니다. 안전한 코드를 위해 필요하다면 checked 블록이나 사전 범위 검사를 함께 활용하는 것이 좋습니다.