Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

แปลง Decimal เป็นจำนวนเต็ม 8 บิตไม่มีเครื่องหมาย (Byte) ใน C#

ภาพรวม

เมธอด Decimal.ToByte(Decimal) แปลงค่า Decimal ให้เป็น byte (8-bit unsigned integer, ช่วง 0-255) โดยตัดทอนส่วนทศนิยม (truncate toward zero) หากค่าอยู่นอกช่วงจะโยน OverflowException

ตัวอย่างที่ 1: แปลงค่าบวกที่มีทศนิยม

using System;

public class Demo
{
    public static void Main()
    {
        Decimal val1 = 6.59m;
        Decimal val2 = 30.12m;
        Decimal val3 = 69.34m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Console.WriteLine("Decimal 3 = " + val3);
        byte res1 = Decimal.ToByte(val1);
        byte res2 = Decimal.ToByte(val2);
        byte res3 = Decimal.ToByte(val3);
        Console.WriteLine("Byte value1 (Decimal to Byte) = " + res1);
        Console.WriteLine("Byte value2 (Decimal to Byte) = " + res2);
        Console.WriteLine("Byte value3 (Decimal to Byte) = " + res3);
    }
}

ผลลัพธ์

Decimal 1 = 6.59
Decimal 2 = 30.12
Decimal 3 = 69.34
Byte value1 (Decimal to Byte) = 6
Byte value2 (Decimal to Byte) = 30
Byte value3 (Decimal to Byte) = 69

ตัวอย่างที่ 2: แปลงค่าลบ (โยน OverflowException)

using System;

public class Demo
{
    public static void Main()
    {
        Decimal val1 = -0.22m;
        Decimal val2 = -0.01m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        try
        {
            byte res1 = Decimal.ToByte(val1);
            byte res2 = Decimal.ToByte(val2);
            Console.WriteLine("Byte value1 (Decimal to Byte) = " + res1);
            Console.WriteLine("Byte value2 (Decimal to Byte) = " + res2);
        }
        catch (OverflowException ex)
        {
            Console.WriteLine("OverflowException: " + ex.Message);
        }
    }
}

ผลลัพธ์ (จริง - โยนข้อยกเว้น)

Decimal 1 = -0.22
Decimal 2 = -0.01
OverflowException: Value was either too large or too small for an unsigned byte.
หมายเหตุ: ต้นฉบับแสดงผลเป็น 0 ซึ่งไม่ถูกต้องจริงๆ โค้ดจริงจะโยน OverflowException สำหรับค่าลบ

คำอธิบายเพิ่มเติม

  • การแปลงตัดทอนส่วนทศนิยม (truncation) ไม่ใช่การปัดเศษ (rounding)
  • ช่วงค่าที่แปลงได้: 0 ถึง 255 (byte.MaxValue)
  • เมธอดที่เกี่ยวข้อง: ToSByte() (signed byte, -128 ถึง 127), ToInt16(), ToInt32(), ToInt64(), ToUInt16(), ToUInt32(), ToUInt64()
  • ใช้ Decimal.Truncate() ก่อนแปลง หากต้องการควบคุมพฤติกรรมการตัดทอน