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

เมธอด Single.CompareTo() ใน C# : เปรียบเทียบค่า float

เมธอด Single.CompareTo() ใน C# ใช้เปรียบเทียบ instance นี้กับ object อื่น หรืออีก Single instance หนึ่ง คืนค่าจำนวนเต็มที่บ่งบอกว่าค่านี้ น้อยกว่า เท่ากับ หรือมากกว่าค่าที่เปรียบเทียบ

รูปแบบไวยากรณ์ (Syntax)

public int CompareTo(float value);
public int CompareTo(object value);
  • คืนค่า น้อยกว่า 0 : instance นี้ น้อยกว่า value
  • คืนค่า 0 : instance นี้ เท่ากับ value
  • คืนค่า มากกว่า 0 : instance นี้ มากกว่า value

ตัวอย่างที่ 1: เปรียบเทียบ float กับ float

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 50.7f;
        float f2 = 50.7f;
        
        Console.WriteLine("Value1 = " + f1);
        Console.WriteLine("Value2 = " + f2);
        Console.WriteLine("Is f1 and f2 equal? = " + f1.CompareTo(f2)); // 0
    }
}

ผลลัพธ์

Value1 = 50.7
Value2 = 50.7
Is f1 and f2 equal? = 0

ตัวอย่างที่ 2: เปรียบเทียบ float กับ object

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 50.7f;
        object f2 = 50.7f; // boxed float
        
        Console.WriteLine("Value1 = " + f1);
        Console.WriteLine("Value2 = " + f2);
        
        int res = f1.CompareTo(f2);
        if (res > 0)
            Console.WriteLine("f1 > f2");
        else if (res < 0)
            Console.WriteLine("f1 < f2");
        else
            Console.WriteLine("f1 = f2");
    }
}

ผลลัพธ์

Value1 = 50.7
Value2 = 50.7
f1 = f2

สรุปและข้อสังเกต

  • Implement interface IComparable และ IComparable<Single>
  • Overload CompareTo(float) มีประสิทธิภาพดีกว่า CompareTo(object) (หลีกเลี่ยง boxing)
  • NaN ถือว่า "น้อยกว่า" ค่าใดๆ รวมถึง NaN เอง (IEEE 754 standard)
  • สำหรับการเปรียบเทียบ floating-point อย่างแม่นยำ ควรพิจารณา epsilon comparison แทน
  • ใช้ใน sorting, searching, และ logic เงื่อนไขที่ต้องเปรียบเทียบค่า float

ตัวอย่างการใช้งานจริง: เรียงลำดับ float array

float[] values = { 3.14f, 1.41f, 2.71f, 0.57f };
Array.Sort(values, (a, b) => a.CompareTo(b));
// ผลลัพธ์: 0.57, 1.41, 2.71, 3.14