เมธอด 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) | True | True | False | False |
| -Infinity (-1.0/0.0) | True | False | True | False |
| NaN (0.0/0.0) | False | False | False | True |
| ค่าปกติ (เช่น 45.5) | False | False | False | False |
ข้อสังเกต
- ไม่สามารถใช้
f == float.NaNได้ เพราะ NaN ไม่เท่ากับตัวมันเอง (NaN != NaN) - ต้องใช้
Single.IsNaN(f)หรือfloat.IsNaN(f)เสมอ - เมธอดนี้เป็น static method เรียกผ่านคลาส
Singleหรือfloatได้