Mục đích
Phương thức tĩnh Decimal.ToUInt64(Decimal value) chuyển đổi giá trị Decimal sang ulong (UInt64). Phần thập phân bị **cắt bỏ** (truncation), không làm tròn.
Ví dụ 1: Chuyển Decimal có phần thập phân
using System;
public class Demo
{
public static void Main()
{
decimal val = 99.29m;
Console.WriteLine($"Giá trị Decimal: {val}");
ulong res = Decimal.ToUInt64(val);
Console.WriteLine($"UInt64 sau chuyển đổi: {res}");
}
}
Kết quả
Giá trị Decimal: 99.29
UInt64 sau chuyển đổi: 99
Ví dụ 2: Chuyển Decimal nhỏ hơn 1
using System;
public class Demo
{
public static void Main()
{
decimal val = 0.001m;
Console.WriteLine($"Giá trị Decimal: {val}");
ulong res = Decimal.ToUInt64(val);
Console.WriteLine($"UInt64 sau chuyển đổi: {res}");
}
}
Kết quả
Giá trị Decimal: 0.001
UInt64 sau chuyển đổi: 0
Ví dụ 3: Xử lý ngoại lệ Overflow
using System;
public class Demo
{
public static void Main()
{
decimal[] values = { -1m, 18446744073709551615m, 18446744073709551616m }; // MaxValue + 1
foreach (decimal v in values)
{
try
{
ulong res = Decimal.ToUInt64(v);
Console.WriteLine($"{v} -> {res}");
}
catch (OverflowException)
{
Console.WriteLine($"{v} -> OverflowException (ngoài phạm vi UInt64)");
}
}
}
}
Kết quả
-1 -> OverflowException (ngoài phạm vi UInt64)
18446744073709551615 -> 18446744073709551615
18446744073709551616 -> OverflowException (ngoài phạm vi UInt64)
Lưu ý quan trọng
- Chỉ chuyển đổi được giá trị trong khoảng [0, UInt64.MaxValue].
- Phần thập phân bị **cắt bỏ** (floor cho số dương).
- Ném
OverflowExceptionnếu giá trị âm hoặc > UInt64.MaxValue. - Có thể dùng
checkedcontext để bắt overflow tại compile-time cho hằng số.