Porady: konwertowanie ciągu na liczbę (Przewodnik programowania w języku C#)
Ciąg można przekonwertować na dowolną liczbę, używając metod dostępnych w klasie Convert.Taka konwersja może być przydatna na przykład, gdy z argumentu wiersza polecenia są uzyskiwane dane liczbowe.W poniższej tabeli przedstawiono niektóre metody, których można użyć.
Typ liczbowy |
Metoda |
---|---|
decimal |
|
float |
|
double |
|
short |
|
int |
|
long |
|
ushort |
|
uint |
|
ulong |
Przykład
W tym przykładzie jest wywoływana metoda ToInt32(String) w celu przekonwertowania ciągu wejściowego na wartość typu int.Program przechwytuje dwa najpopularniejsze wyjątki, które mogą zostać zgłoszone przez tę metodę — FormatException i OverflowException.Jeśli liczbę można zwiększyć bez przepełnienia lokalizacji magazynu liczb całkowitych, program dodaje do wyniku 1 i drukuje dane wyjściowe.
static void Main(string[] args)
{
int numVal = -1;
bool repeat = true;
while (repeat == true)
{
Console.WriteLine("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive).");
string input = Console.ReadLine();
// ToInt32 can throw FormatException or OverflowException.
try
{
numVal = Convert.ToInt32(input);
}
catch (FormatException e)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException e)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
finally
{
if (numVal < Int32.MaxValue)
{
Console.WriteLine("The new value is {0}", numVal + 1);
}
else
{
Console.WriteLine("numVal cannot be incremented beyond its current value");
}
}
Console.WriteLine("Go again? Y/N");
string go = Console.ReadLine();
if (go == "Y" || go == "y")
{
repeat = true;
}
else
{
repeat = false;
}
}
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
// Sample Output:
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive).
// 473
// The new value is 474
// Go again? Y/N
// y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive).
// 2147483647
// numVal cannot be incremented beyond its current value
// Go again? Y/N
// Y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive).
// -1000
// The new value is -999
// Go again? Y/N
// n
// Press any key to exit.
Inną metodą konwersji wartości typu string na wartość typu int jest użycie metody Parse lub TryParse dostępnej w strukturze Int32.Metoda ToUInt32 używa wewnętrznie metody Parse.Jeśli ciąg nie ma prawidłowego formatu, metoda Parse zgłasza wyjątek, a metoda TryParse nie zgłasza wyjątku, ale zwraca wartość false.W przykładach pokazano zarówno udane, jak i nieudane wywołania metod Parse i TryParse.
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
// Output: -105
// TryParse returns true if the conversion succeeded
// and stores the result in the specified variable.
int j;
bool result = Int32.TryParse("-105", out j);
if (true == result)
Console.WriteLine(j);
else
Console.WriteLine("String could not be parsed.");
// Output: -105
try
{
int m = Int32.Parse("abc");
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: Input string was not in a correct format.
string inputString = "abc";
int numValue;
bool parsed = Int32.TryParse(inputString, out numValue);
if (!parsed)
Console.WriteLine("Int32.TryParse could not parse '{0}' to an int.\n", inputString);
// Output: Int32.TryParse could not parse 'abc' to an int.
Zobacz też
Zadania
Porady: określanie, czy ciąg reprezentuje wartość numeryczną (Przewodnik programowania w języku C#)
Informacje
Typy (Przewodnik programowania w języku C#)