Giới thiệu
Phương thức Single.IsNaN() trong C# trả về giá trị boolean cho biết giá trị float được chỉ định có phải là NaN (Not a Number - không phải số) hay không. NaN thường xuất hiện từ các phép toán không xác định như 0/0 hoặc căn bậc hai của số âm.
Cú pháp
public static bool IsNaN (float f);
Tham số f là số thực dấu chấm động đơn (single-precision floating-point number).
Ví dụ 1: Kiểm tra vô cực và số bình thường
using System;
public class Demo {
public static void Main() {
float f1 = 5.0f / 0.0f; // Vô cực dương
float f2 = 45.5f; // Số bình thường
Console.WriteLine("Value1 = " + f1);
Console.WriteLine("Hashcode cho Value1 = " + f1.GetHashCode());
Console.WriteLine("TypeCode cho Value1 = " + f1.GetTypeCode());
Console.WriteLine("Value1 là vô cực (dương hoặc âm)? = " + Single.IsInfinity(f1));
Console.WriteLine("Value1 là NaN? = " + Single.IsNaN(f1));
Console.WriteLine("\nValue2 = " + f2);
Console.WriteLine("Hashcode cho Value2 = " + f2.GetHashCode());
Console.WriteLine("TypeCode cho Value2 = " + f2.GetTypeCode());
Console.WriteLine("Value2 là vô cực (dương hoặc âm)? = " + Single.IsInfinity(f2));
Console.WriteLine("Value2 là NaN? = " + Single.IsNaN(f2));
}
}
Đầu ra ví dụ 1
Value1 = ∞ Hashcode cho Value1 = 2139095040 TypeCode cho Value1 = Single Value1 là vô cực (dương hoặc âm)? = True Value1 là NaN? = False Value2 = 45.5 Hashcode cho Value2 = 1110835200 TypeCode cho Value2 = Single Value2 là vô cực (dương hoặc âm)? = False Value2 là NaN? = False
Ví dụ 2: Kiểm tra NaN thực sự
using System;
public class Demo {
public static void Main() {
float f1 = 5.0f / 0.0f; // Vô cực dương
float f2 = 0.0f / 0.0f; // NaN (0 chia cho 0)
Console.WriteLine("Value1 = " + f1);
Console.WriteLine("Hashcode cho Value1 = " + f1.GetHashCode());
Console.WriteLine("TypeCode cho Value1 = " + f1.GetTypeCode());
Console.WriteLine("Value1 là vô cực (dương hoặc âm)? = " + Single.IsInfinity(f1));
Console.WriteLine("Value1 là NaN? = " + Single.IsNaN(f1));
Console.WriteLine("\nValue2 = " + f2);
Console.WriteLine("Hashcode cho Value2 = " + f2.GetHashCode());
Console.WriteLine("TypeCode cho Value2 = " + f2.GetTypeCode());
Console.WriteLine("Value2 là vô cực (dương hoặc âm)? = " + Single.IsInfinity(f2));
Console.WriteLine("Value2 là NaN? = " + Single.IsNaN(f2));
}
}
Đầu ra ví dụ 2
Value1 = ∞ Hashcode cho Value1 = 2139095040 TypeCode cho Value1 = Single Value1 là vô cực (dương hoặc âm)? = True Value1 là NaN? = False Value2 = NaN Hashcode cho Value2 = -4194304 TypeCode cho Value2 = Single Value2 là vô cực (dương hoặc âm)? = False Value2 là NaN? = True
Đặc điểm quan trọng về NaN
- NaN != NaN: So sánh NaN với bất kỳ giá trị nào (kể cả NaN) luôn trả về
false. Do đó không thể dùngf == float.NaNđể kiểm tra. - Luôn dùng
Single.IsNaN(f)hoặcfloat.IsNaN(f). - Các phép toán tạo ra NaN: 0/0, ∞ - ∞, ∞/∞, sqrt(-1), log(-1), v.v.
float.NaNlà hằng số đại diện cho giá trị NaN.
Bảng tóm tắt
| Giá trị | IsInfinity | IsNaN | IsNegativeInfinity | IsPositiveInfinity |
|---|---|---|---|---|
| 5.0f/0.0f (∞) | True | False | False | True |
| -5.0f/0.0f (-∞) | True | False | True | False |
| 0.0f/0.0f (NaN) | False | True | False | False |
| 45.5f | False | False | False | False |