개요
C#의 Single.ToString() 메서드는 float(Single) 형식 인스턴스가 지닌 숫자 값을 그에 대응하는 문자열 표현으로 변환합니다. 숫자를 콘솔에 출력하거나, 로그를 기록하거나, 다른 문자열과 연결해야 할 때 가장 기본적으로 사용되는 메서드입니다.
구문
메서드의 기본 구문은 다음과 같습니다.
public override string ToString ();
이 메서드는 매개변수를 받지 않으며, 현재 인스턴스의 값을 나타내는 문자열을 반환합니다. 특수한 부동 소수점 값은 다음과 같이 변환됩니다.
- 양의 무한대(+∞) → "∞"
- 음의 무한대(-∞) → "-∞"
- NaN(숫자 아님) → "NaN"
예제 1: 무한대 값과 일반 값 변환
아래 예제에서는 0으로 나누어 발생한 양의 무한대 값과 일반적인 음수 값에 대해 ToString() 메서드를 호출한 결과를 확인합니다.
using System;
public class Demo {
public static void Main(){
float f1 = 10.0f/0.0f;
float f2 = -3.0f;
Console.WriteLine("값1(문자열 표현) = "+f1.ToString());
Console.WriteLine("값1의 해시 코드 = "+f1.GetHashCode());
Console.WriteLine("값1의 TypeCode = "+f1.GetTypeCode());
Console.WriteLine("값1이 양수 또는 음수 무한대인가? = "+Single.IsInfinity(f1));
Console.WriteLine("값1이 NaN인가? = "+Single.IsNaN(f1));
Console.WriteLine("값1이 양의 무한대인가? = "+Single.IsPositiveInfinity(f1));
Console.WriteLine("\n값2(문자열 표현) = "+f2.ToString());
Console.WriteLine("값2의 해시 코드 = "+f2.GetHashCode());
Console.WriteLine("값2의 TypeCode = "+f2.GetTypeCode());
Console.WriteLine("값2가 양수 또는 음수 무한대인가? = "+Single.IsInfinity(f2));
Console.WriteLine("값2가 NaN인가? = "+Single.IsNaN(f2));
Console.WriteLine("값2가 양의 무한대인가? = "+Single.IsPositiveInfinity(f2));
}
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
값1(문자열 표현) = ∞
값1의 해시 코드 = 2139095040
값1의 TypeCode = Single
값1이 양수 또는 음수 무한대인가? = True
값1이 NaN인가? = False
값1이 양의 무한대인가? = True
값2(문자열 표현) = -3
값2의 해시 코드 = -1069547520
값2의 TypeCode = Single
값2가 양수 또는 음수 무한대인가? = False
값2가 NaN인가? = False
값2가 양의 무한대인가? = False
10.0f / 0.0f처럼 부동 소수점 수를 0으로 나누면 정수형과 달리 예외가 발생하지 않고 양의 무한대(∞)가 됩니다. 따라서 f1.ToString()의 결과는 "∞"로 출력됩니다.
예제 2: NaN(숫자 아님) 값 처리
이번에는 양의 무한대와 NaN(Not a Number) 값을 함께 살펴보겠습니다. 0.0f / 0.0f의 결과는 NaN이 되며, ToString()은 이를 "NaN" 문자열로 반환합니다.
using System;
public class Demo {
public static void Main(){
float f1 = 5.0f/0.0f;
float f2 = 0.0f/0.0f;
Console.WriteLine("값1(문자열 표현) = "+f1.ToString());
Console.WriteLine("값1의 해시 코드 = "+f1.GetHashCode());
Console.WriteLine("값1의 TypeCode = "+f1.GetTypeCode());
Console.WriteLine("값1이 양수 또는 음수 무한대인가? = "+Single.IsInfinity(f1));
Console.WriteLine("값1이 NaN인가? = "+Single.IsNaN(f1));
Console.WriteLine("값1이 음의 무한대인가? = "+Single.IsNegativeInfinity(f1));
Console.WriteLine("\n값2(문자열 표현) = "+f2.ToString());
Console.WriteLine("값2의 해시 코드 = "+f2.GetHashCode());
Console.WriteLine("값2의 TypeCode = "+f2.GetTypeCode());
Console.WriteLine("값2가 양수 또는 음수 무한대인가? = "+Single.IsInfinity(f2));
Console.WriteLine("값2가 NaN인가? = "+Single.IsNaN(f2));
Console.WriteLine("값2가 음의 무한대인가? = "+Single.IsNegativeInfinity(f2));
}
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
값1(문자열 표현) = ∞
값1의 해시 코드 = 2139095040
값1의 TypeCode = Single
값1이 양수 또는 음수 무한대인가? = True
값1이 NaN인가? = False
값1이 음의 무한대인가? = False
값2(문자열 표현) = NaN
값2의 해시 코드 = -4194304
값2의 TypeCode = Single
값2가 양수 또는 음수 무한대인가? = False
값2가 NaN인가? = True
값2가 음의 무한대인가? = False
핵심 정리
- Single.ToString()은 매개변수 없이 호출하며, 현재 float 값을 문자열로 반환합니다.
- 부동 소수점 나눗셈에서 0으로 나누면 예외가 발생하지 않고 ±∞ 또는 NaN이 됩니다.
- ToString()은 무한대를 "∞" 또는 "-∞"로, NaN을 "NaN"으로 각각 변환합니다.
- Single.IsInfinity(), IsPositiveInfinity(), IsNegativeInfinity(), IsNaN() 같은 정적 메서드로 특수 값을 손쉽게 판별할 수 있습니다.
- GetHashCode()는 값의 해시 코드를, GetTypeCode()는 TypeCode.Single을 반환합니다.