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

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

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ùng f == float.NaN để kiểm tra.
  • Luôn dùng Single.IsNaN(f) hoặc float.IsNaN(f).
  • Các phép toán tạo ra NaN: 0/0, ∞ - ∞, ∞/∞, sqrt(-1), log(-1), v.v.
  • float.NaN là 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 (∞)TrueFalseFalseTrue
-5.0f/0.0f (-∞)TrueFalseTrueFalse
0.0f/0.0f (NaN)FalseTrueFalseFalse
45.5fFalseFalseFalseFalse