C#에서 지정된 Decimal 값을 그에 상응하는 32비트 부호 없는 정수(uint)로 변환하려면 Decimal.ToUInt32() 메서드를 사용합니다.
이 메서드는 Decimal 값의 소수점 이하 자릿수를 버리고(절삭), 0부터 4,294,967,295 범위 내의 부호 없는 32비트 정수를 반환합니다. 만약 값이 이 범위를 벗어나거나 음수일 경우 OverflowException이 발생하므로 주의해야 합니다.
예제 1
다음은 소수점 이하가 있는 작은 Decimal 값을 변환하는 예제입니다.
using System;
public class Demo {
public static void Main() {
Decimal val = 0.001m;
Console.WriteLine("Decimal 값 = " + val);
uint res = Decimal.ToUInt32(val);
Console.WriteLine("32비트 부호 없는 정수 = " + res);
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Decimal 값 = 0.001 32비트 부호 없는 정수 = 0
0.001은 소수점 이하가 잘려나가면서 0으로 변환된 것을 확인할 수 있습니다.
예제 2
이번에는 정수부와 소수부를 모두 가진 더 큰 값을 변환해 보겠습니다.
using System;
public class Demo {
public static void Main() {
Decimal val = 67.487m;
Console.WriteLine("Decimal 값 = " + val);
uint res = Decimal.ToUInt32(val);
Console.WriteLine("32비트 부호 없는 정수 = " + res);
}
}출력 결과
실행 결과는 다음과 같습니다.
Decimal 값 = 67.487 32비트 부호 없는 정수 = 67
결과에서 볼 수 있듯이 Decimal.ToUInt32()는 반올림이 아닌 절삭(truncation) 방식으로 동작하기 때문에 67.487이 68이 아닌 67으로 변환됩니다. 따라서 반올림 처리가 필요하다면 Math.Round() 등을 사용한 후 변환하는 것이 좋습니다.