Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chuyển đổi Decimal sang UInt64 (64-bit unsigned integer) trong C#

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 OverflowException nếu giá trị âm hoặc > UInt64.MaxValue.
  • Có thể dùng checked context để bắt overflow tại compile-time cho hằng số.