Giới thiệu
Phương thức Double.CompareTo() trong C# so sánh thể hiện hiện tại với một object hoặc Double được chỉ định, trả về số nguyên chỉ ra giá trị của thể hiện này nhỏ hơn, bằng, hay lớn hơn giá trị được so sánh.
Cú pháp
public int CompareTo (double val); public int CompareTo (object val);
- Cú pháp 1:
vallà số thực double-precision để so sánh. - Cú pháp 2:
vallà object để so sánh (phải làdoublehoặc null).
Giá trị trả về
| Giá trị | Ý nghĩa |
|---|---|
| < 0 | Thể hiện hiện tại nhỏ hơn val |
| = 0 | Thể hiện hiện tại bằng val |
| > 0 | Thể hiện hiện tại lớn hơn val |
Ví dụ 1: So sánh hai double bằng nhau
using System;
public class Demo {
public static void Main() {
double d1 = 150d;
double d2 = 150d;
Console.WriteLine("Double1 Value = " + d1);
Console.WriteLine("Double2 Value = " + d2);
Console.WriteLine("Kết quả so sánh (CompareTo) = " + d1.CompareTo(d2));
}
}
Đầu ra ví dụ 1
Double1 Value = 150 Double2 Value = 150 Kết quả so sánh (CompareTo) = 0
Ví dụ 2: So sánh double với object
using System;
public class Demo {
public static void Main() {
double d1 = 20d;
object d2 = 20d; // Boxing
Console.WriteLine("Double1 Value = " + d1);
Console.WriteLine("Double2 Value = " + d2);
Console.WriteLine("Kết quả so sánh (CompareTo) = " + d1.CompareTo(d2));
}
}
Đầu ra ví dụ 2
Double1 Value = 20 Double2 Value = 20 Kết quả so sánh (CompareTo) = 0
Ví dụ mở rộng: Các trường hợp so sánh
using System;
public class Demo {
public static void Main() {
double[] values = { 10.5, -5.0, 0.0, double.NaN, double.PositiveInfinity, double.NegativeInfinity };
double reference = 0.0;
foreach (double v in values) {
int cmp = v.CompareTo(reference);
string relation = cmp < 0 ? "nhỏ hơn" : (cmp > 0 ? "lớn hơn" : "bằng");
Console.WriteLine($"{v,15} so với 0.0: {cmp,3} ({relation})");
}
// So sánh với NaN
Console.WriteLine("\nSo sánh với NaN:");
Console.WriteLine("NaN.CompareTo(NaN) = " + double.NaN.CompareTo(double.NaN)); // 0 (bằng nhau theo CompareTo)
Console.WriteLine("NaN.CompareTo(1.0) = " + double.NaN.CompareTo(1.0)); // -1 (NaN coi như nhỏ hơn mọi số)
Console.WriteLine("1.0.CompareTo(NaN) = " + 1.0.CompareTo(double.NaN)); // 1 (mọi số lớn hơn NaN)
}
}
Đầu ra mở rộng
10.5 so với 0.0: 1 (lớn hơn)
-5.0 so với 0.0: -1 (nhỏ hơn)
0.0 so với 0.0: 0 (bằng)
NaN so với 0.0: -1 (nhỏ hơn)
∞ so với 0.0: 1 (lớn hơn)
-∞ so với 0.0: -1 (nhỏ hơn)
So sánh với NaN:
NaN.CompareTo(NaN) = 0
NaN.CompareTo(1.0) = -1
1.0.CompareTo(NaN) = 1
Lưu ý quan trọng
CompareTotriển khaiIComparablevàIComparable<double>.- Khác với
Equals,CompareTocho phép sắp xếp (sorting). - Quy tắc so sánh NaN:
NaN.CompareTo(NaN) = 0,NaN.CompareTo(any number) = -1,any number.CompareTo(NaN) = 1. Điều này đảm bảo NaN được sắp xếp ở đầu. - Nếu
vallà object không phải double (và không null), némArgumentException. - Với
object val = null, trả về 1 (mọi instance lớn hơn null).
Ứng dụng
- Sắp xếp mảng/List double:
Array.Sort(arr)dùngCompareTonội bộ. - Binary search, tree-based structures (SortedSet, SortedDictionary).
- Logic điều khiển dựa trên ngưỡng (threshold comparison).