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

Phương thức Single.CompareTo() trong C# với ví dụ

Phương thức Single.CompareTo() trong C# được dùng để so sánh instance này với một object chỉ định hoặc một instance Single khác, trả về số nguyên cho biết giá trị của instance này nhỏ hơn, bằng, hay lớn hơn giá trị được so sánh.

Cú pháp

public int CompareTo(float value);
public int CompareTo(object value);
  • Nạp chồng 1: value là số float (single-precision) cần so sánh.
  • Nạp chồng 2: value là object cần so sánh (phải là float hoặc null).

Giá trị trả về

Kết quả Ý nghĩa
< 0 Instance này < value
= 0 Instance này = value
> 0 Instance này > value

Lưu ý: NaN được coi là nhỏ hơn bất kỳ giá trị nào (kể cả NaN khác). null được coi là nhỏ hơn mọi instance.

Ví dụ 1: So sánh hai float bằng nhau

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 50.7f;
        float f2 = 50.7f;

        Console.WriteLine("Giá trị 1 = " + f1);
        Console.WriteLine("Giá trị 2 = " + f2);
        Console.WriteLine("f1.CompareTo(f2) = " + f1.CompareTo(f2)); // 0
    }
}

Kết quả

Giá trị 1 = 50.7
Giá trị 2 = 50.7
f1.CompareTo(f2) = 0

Ví dụ 2: So sánh với object (boxed float)

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 50.7f;
        object f2 = 50.7f; // Boxed float

        Console.WriteLine("Giá trị 1 = " + f1);
        Console.WriteLine("Giá trị 2 = " + 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");
    }
}

Kết quả

Giá trị 1 = 50.7
Giá trị 2 = 50.7
f1 = f2

So sánh với các giá trị đặc biệt

float nan = float.NaN;
float posInf = float.PositiveInfinity;
float negInf = float.NegativeInfinity;
float zero = 0.0f;

Console.WriteLine("NaN.CompareTo(1.0f) = " + nan.CompareTo(1.0f)); // -1 (NaN < mọi giá trị)
Console.WriteLine("1.0f.CompareTo(NaN) = " + 1.0f.CompareTo(nan)); // 1 (mọi giá trị > NaN)
Console.WriteLine("NaN.CompareTo(NaN) = " + nan.CompareTo(nan)); // -1 (NaN < NaN!)

Console.WriteLine("PosInf.CompareTo(1.0f) = " + posInf.CompareTo(1.0f)); // 1
Console.WriteLine("NegInf.CompareTo(-1.0f) = " + negInf.CompareTo(-1.0f)); // -1
Console.WriteLine("0.0f.CompareTo(-0.0f) = " + 0.0f.CompareTo(-0.0f)); // 0 (bằng nhau)

Lưu ý quan trọng

  • So sánh float trực tiếp bằng == có thể sai do độ chính xác (precision). Dùng Math.Abs(a-b) < epsilon cho so sánh gần đúng.
  • CompareTo tuân theo quy tắc IEEE 754 cho NaN/Infinity.
  • Ném ArgumentException nếu value không phải float hoặc null (trong nạp chồng object).
  • Triển khai interface IComparable và IComparable<float>.

Các phương thức so sánh liên quan

  • Single.Equals(float): Kiểm tra bằng nhau (trả về bool).
  • Math.Sign(float): Trả về -1, 0, 1 cho dấu của số.
  • float.IsNaN(), float.IsInfinity(): Kiểm tra giá trị đặc biệt.