Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เมธอด Single.IsNaN() ใน C# พร้อมตัวอย่าง


เมธอด Single.IsNaN() ใน C# ใช้สำหรับตรวจสอบว่าค่าที่ระบุเป็น NaN (Not a Number) หรือไม่ โดยคืนค่า true หากค่าเป็น NaN มิฉะนั้นคืนค่า false

ไวยากรณ์ (Syntax)

public static bool IsNaN (float f);

พารามิเตอร์ f คือตัวเลขทศนิยมความแม่นยำเดี่ยว (single-precision floating-point number) ที่ต้องการตรวจสอบ

ตัวอย่างที่ 1: ตรวจสอบค่าอนันต์และค่าปกติ

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 5.0f / 0.0f;   // +Infinity
        float f2 = 45.5f;         // ค่าปกติ

        Console.WriteLine("Value1 = " + f1);
        Console.WriteLine("Hashcode for Value1 = " + f1.GetHashCode());
        Console.WriteLine("TypeCode for Value1 = " + f1.GetTypeCode());
        Console.WriteLine("Is Value1 infinity? = " + Single.IsInfinity(f1));
        Console.WriteLine("Is Value1 NaN? = " + Single.IsNaN(f1));

        Console.WriteLine("\nValue2 = " + f2);
        Console.WriteLine("Hashcode for Value2 = " + f2.GetHashCode());
        Console.WriteLine("TypeCode for Value2 = " + f2.GetTypeCode());
        Console.WriteLine("Is Value2 infinity? = " + Single.IsInfinity(f2));
        Console.WriteLine("Is Value2 NaN? = " + Single.IsNaN(f2));
    }
}

ผลลัพธ์

Value1 = ∞
Hashcode for Value1 = 2139095040
TypeCode for Value1 = Single
Is Value1 infinity? = True
Is Value1 NaN? = False

Value2 = 45.5
Hashcode for Value2 = 1110835200
TypeCode for Value2 = Single
Is Value2 infinity? = False
Is Value2 NaN? = False

ตัวอย่างที่ 2: ตรวจสอบค่า NaN จากการหารศูนย์ด้วยศูนย์

using System;

public class Demo
{
    public static void Main()
    {
        float f1 = 5.0f / 0.0f;    // +Infinity
        float f2 = 0.0f / 0.0f;    // NaN

        Console.WriteLine("Value1 = " + f1);
        Console.WriteLine("Hashcode for Value1 = " + f1.GetHashCode());
        Console.WriteLine("TypeCode for Value1 = " + f1.GetTypeCode());
        Console.WriteLine("Is Value1 infinity? = " + Single.IsInfinity(f1));
        Console.WriteLine("Is Value1 NaN? = " + Single.IsNaN(f1));

        Console.WriteLine("\nValue2 = " + f2);
        Console.WriteLine("Hashcode for Value2 = " + f2.GetHashCode());
        Console.WriteLine("TypeCode for Value2 = " + f2.GetTypeCode());
        Console.WriteLine("Is Value2 infinity? = " + Single.IsInfinity(f2));
        Console.WriteLine("Is Value2 NaN? = " + Single.IsNaN(f2));
    }
}

ผลลัพธ์

Value1 = ∞
Hashcode for Value1 = 2139095040
TypeCode for Value1 = Single
Is Value1 infinity? = True
Is Value1 NaN? = False

Value2 = NaN
Hashcode for Value2 = -4194304
TypeCode for Value2 = Single
Is Value2 infinity? = False
Is Value2 NaN? = True

สรุปการทำงานของเมธอดตรวจสอบค่า float พิเศษ

ค่าIsInfinity()IsPositiveInfinity()IsNegativeInfinity()IsNaN()
+Infinity (1.0/0.0)TrueTrueFalseFalse
-Infinity (-1.0/0.0)TrueFalseTrueFalse
NaN (0.0/0.0)FalseFalseFalseTrue
ค่าปกติ (เช่น 45.5)FalseFalseFalseFalse

ข้อสังเกต

  • ไม่สามารถใช้ f == float.NaN ได้ เพราะ NaN ไม่เท่ากับตัวมันเอง (NaN != NaN)
  • ต้องใช้ Single.IsNaN(f) หรือ float.IsNaN(f) เสมอ
  • เมธอดนี้เป็น static method เรียกผ่านคลาส Single หรือ float ได้