Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Převedete číslo string voláním Parse nebo TryParse metodou nalezenou u číselných typů (int, long, doubleatd.) nebo pomocí metod ve System.Convert třídě.
Je mírně efektivnější a jednodušší volat metodu TryParse (například int.TryParse("11", out number)) nebo metodu Parse (například var number = int.Parse("11")). Použití metody Convert je užitečnější pro obecné objekty, které implementují IConvertible.
U číselného typu, který očekáváte, že řetězec obsahuje, použijete metody Parse nebo TryParse, například u typu System.Int32. Metoda Convert.ToInt32 používá Parse interně. Metoda Parse vrátí převedené číslo; TryParse metoda vrátí logickou hodnotu, která určuje, zda byl převod úspěšný, a vrátí převedené číslo v parametru out . Pokud řetězec není v platném formátu, Parse vyvolá výjimku, ale TryParse vrátí false. hodnotu. Při volání metody Parse byste měli vždy použít zpracování výjimek FormatException, abyste zachytili výjimku při selhání operace analýzy.
Návod
Pomoc s AI můžete použít k převodu řetězce na číslo.
Volání metod Parse nebo TryParse
Parse Metody TryParse ignorují prázdné znaky na začátku a na konci řetězce, ale všechny ostatní znaky musí být znaky, které tvoří příslušný číselný typ (int, , long, ulongfloat, decimalatd.). Jakékoli prázdné znaky v řetězci, který tvoří číslo, způsobí chybu. Můžete například použít k parsování "10", "10,3" nebo " 10 ", ale tuto metodu nemůžete použít decimal.TryParse k parsování 10 z "10X", "1 0" (všimněte si vloženého prostoru), "10 ,3" (poznámka: vložené místo), "10e1" (float.TryParse pracuje zde) atd. Řetězec, jehož hodnota je null nebo String.Empty se nepodaří úspěšně analyzovat. Hodnotu null nebo prázdný řetězec můžete zkontrolovat voláním metody String.IsNullOrEmpty před pokusem o jeho parsování.
Následující příklad ukazuje úspěšná i neúspěšná volání k Parse a TryParse.
using System;
public static class StringConversion
{
public static void Main()
{
string input = String.Empty;
try
{
int result = Int32.Parse(input);
Console.WriteLine(result);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{input}'");
}
// Output: Unable to parse ''
try
{
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: -105
if (Int32.TryParse("-105", out int j))
{
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.
const string inputString = "abc";
if (Int32.TryParse(inputString, out int numValue))
{
Console.WriteLine(numValue);
}
else
{
Console.WriteLine($"Int32.TryParse could not parse '{inputString}' to an int.");
}
// Output: Int32.TryParse could not parse 'abc' to an int.
}
}
Následující příklad ukazuje jeden přístup k analýze řetězce, u které se očekává, že bude obsahovat počáteční číselné znaky (včetně šestnáctkových znaků) a koncové nečíselné znaky. Přiřadí platné znaky od začátku řetězce k novému řetězci před voláním metody TryParse. Vzhledem k tomu, že řetězce, které mají být analyzovány, obsahují několik znaků, příklad volá metodu String.Concat pro přiřazení platných znaků k novému řetězci. Místo toho lze pro větší řetězec použít třídu StringBuilder.
using System;
public static class StringConversion
{
public static void Main()
{
var str = " 10FFxxx";
string numericString = string.Empty;
foreach (var c in str)
{
// Check for numeric characters (hex in this case) or leading or trailing spaces.
if ((c >= '0' && c <= '9') || (char.ToUpperInvariant(c) >= 'A' && char.ToUpperInvariant(c) <= 'F') || c == ' ')
{
numericString = string.Concat(numericString, c.ToString());
}
else
{
break;
}
}
if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {i}");
}
// Output: ' 10FFxxx' --> ' 10FF' --> 4351
str = " -10FFXXX";
numericString = "";
foreach (char c in str)
{
// Check for numeric characters (0-9), a negative sign, or leading or trailing spaces.
if ((c >= '0' && c <= '9') || c == ' ' || c == '-')
{
numericString = string.Concat(numericString, c);
}
else
{
break;
}
}
if (int.TryParse(numericString, out int j))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {j}");
}
// Output: ' -10FFXXX' --> ' -10' --> -10
}
}
Volání metod Convert
Následující tabulka uvádí některé metody z Convert třídy, které můžete použít k převodu řetězce na číslo.
| Číselný typ | metoda |
|---|---|
decimal |
ToDecimal(String) |
float |
ToSingle(String) |
double |
ToDouble(String) |
short |
ToInt16(String) |
int |
ToInt32(String) |
long |
ToInt64(String) |
ushort |
ToUInt16(String) |
uint |
ToUInt32(String) |
ulong |
ToUInt64(String) |
Následující příklad volá metodu Convert.ToInt32(String) pro převod vstupního řetězce na int. Příklad zachytí dvě nejběžnější výjimky vyvolané touto metodou: FormatException a OverflowException. Pokud je možné výsledné číslo zvýšit bez překročení Int32.MaxValue, přidá příklad k výsledku hodnotu 1 a zobrazí výstup.
using System;
public class ConvertStringExample1
{
static void Main(string[] args)
{
int numVal = -1;
bool repeat = true;
while (repeat)
{
Console.Write("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);
if (numVal < Int32.MaxValue)
{
Console.WriteLine($"The new value is {++numVal}");
}
else
{
Console.WriteLine("numVal cannot be incremented beyond its current value");
}
}
catch (FormatException)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
Console.Write("Go again? Y/N: ");
string? go = Console.ReadLine();
if (go?.ToUpper() != "Y")
{
repeat = false;
}
}
}
}
// 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
Převod řetězce na číslo pomocí AI
Pomocí nástrojů AI, jako je GitHub Copilot, můžete vygenerovat kód jazyka C#, který převede řetězec na číslo. Výzvu můžete přizpůsobit tak, aby používala řetězec podle vašich požadavků.
Následující text ukazuje příklad výzvy pro Copilot Chat:
Show me how to parse a string as a number, but don't throw an exception if the input string doesn't represent a number.
GitHub Copilot využívá technologii AI, takže jsou možná překvapení a chyby. Další informace najdete v nejčastějších dotazech ke copilotu.