문자열과 숫자의 변환
두 개의 숫자를 입력받아서 계산하는 계산기 프로그램을 만들려고 한다.
Console.ReadLine()으로 입력받은 값은 string 인데 계산을 하려면 이를 숫자로 바꾸어야 한다.
이와 같이 문자열을 숫자로 바꾸거나 반대로 숫자를 문자열로 바꾸어야 할 경우가 많다.
문자열을 숫자로 바꾸는 방법은 두 가지가 있다.
하나는 숫자 형식(int, flaot, double) 등에 있는 Parse()나 TryParse() 메소드를 사용하는 것이고,
또 다른 하나는 Convert 클래스의 메소드를 사용하는 것이다.
Parse()와 TryParse() 두 메소드 모두 문자열을 앞뒤에 있는 공백은 무시한다.
다른 모든 문자들은 int, double, decimal 등의 숫자형식에 맞는 문자들이여야 한다.
문자열 중간에 공백이 있으면 에러가 발생한다.
예를 들어, decimal.TryParse() 를 사용할 때 "10", "10.5" 등은 가능하지만 "10e2"(flaot 에서는 가능) 이나
"1 0" 과 같은 문자열은 에러가 발생한다.
문자열이 숫자를 나타내지 않는 경우에는 Parse()는 에러가 발생하고 TryParse()는 false를 리턴한다.
using System;
namespace _053_A014_StringToNumber
{
internal class Program
{
static void Main(string[] args)
{
string input;
int value;
Console.Write("1. int로 변환할 문자열을 입력하세요: ");
input = Console.ReadLine();
bool result = Int32.TryParse(input, out value);
if (!result)
{
Console.WriteLine("'{0}'는 int로 변환될 수 없습니다. \n", input);
}
else
{
Console.WriteLine("int '{0}'는 int로 변환되었습니다.\n", input);
}
Console.Write("2. double로 변환할 문자열을 입력하세요");
input = Console.ReadLine();
try
{
double m = Double.Parse(input);
//double m = Convert.ToDouble(input);
Console.WriteLine("double '{0}'으로 변환되었습니다.\n", m);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
}
}
}
static void Main(string[] args)
{
string input;
int value;
Console.Write("1. int로 변환할 문자열을 입력하세요: ");
- 입력을 안내하는 문자열을 출력한다.
input = Console.ReadLine();
- Console.ReadLine() 으로 문자열을 입력받아 string input에 저장한다.
bool result = Int32.TryParse(input, out value);
- Int32.TryParse() 메소드로 input을 정수 value로 변환한다.변환이 성공하면 bool result는 true가 되고,
실패하면 false가 된다.
if (!result)
{
Console.WriteLine("'{0}'는 int로 변환될 수 없습니다. \n", input);
}
else
{
Console.WriteLine("int '{0}'는 int로 변환되었습니다.\n", input);
}
- bool result 값에 따라 성공하였으면 변환된 value 값을 출력하고 실패하였으면 "int로 변환될 수 없습니다." 라고 출력한다.
Console.Write("2. double로 변환할 문자열을 입력하세요");
- 입력을 안내하는 문자열을 출력한다.
input = Console.ReadLine();
- Console.ReadLine() 으로 문자열을 입력받아 string input 에 저장한다.
try
{
- try ~ catch 문은 예외가 발생하였을 때 (C#에서는 에러를 예외라고 한다.) 처리하는 문장이다.
TryParse()는 리턴값으로 true와 false를 주어서 예외상황에 따른 처리가 가능하지만 Parse()는 에러가 나면 프로그램이 그대로 종료된다. try 블록에서 에러가 발생하면 catch 블록에서 어떤 에러인지 정보를 제공하고 처리할 수 있도록 해준다.
double m = Double.Parse(input);
//double m = Convert.ToDouble(input);
- double.Parse() 메소드로 input을 double m 으로 변환하고 출력한다.
Console.WriteLine("double '{0}'으로 변환되었습니다.\n", m);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
- 에러가 발생하면 시스템에서 제공하는 에러 메세지를 출력한다.
}
}
Convert 클래스의 메소드들은 Parse() 와 똑같이 동작한다. 위의 Double.Parse() 부분을 Convert.ToDouble()로 바꾸면 똑같이 동작하는 프로그램이 된다.