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:
valuelà số float (single-precision) cần so sánh. - Nạp chồng 2:
valuelà 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ùngMath.Abs(a-b) < epsiloncho so sánh gần đúng. CompareTotuân theo quy tắc IEEE 754 cho NaN/Infinity.- Ném
ArgumentExceptionnếuvaluekhông phải float hoặc null (trong nạp chồng object). - Triển khai interface
IComparablevà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.