Analyse de chaînes numériques
Mise à jour : novembre 2007
Tous les types numériques disposent d'une méthode Parse statique que vous pouvez utiliser pour convertir une représentation sous forme de chaîne d'un type numérique en un type numérique réel. Ces méthodes vous permettent d'analyser des chaînes produites à l'aide de l'un des spécificateurs de mise en forme couverts dans Chaînes de format numériques.
Les caractères utilisés pour représenter des symboles de devises, les séparateurs des milliers et les virgules séparant les décimales sont définis dans les fournisseurs de format. La méthode Parse accepte un fournisseur de format, ce qui vous permet de spécifier et d'analyser explicitement des chaînes propres à une culture. Si aucun fournisseur de format n'est spécifié, le fournisseur associé au thread en cours est utilisé. Pour plus d'informations, consultez Vue d'ensemble des formats.
L'exemple du code suivant convertit une chaîne en valeur entière, incrémente cette valeur et affiche le résultat.
Dim MyString As String = "12345"
Dim MyInt As Integer = Integer.Parse(MyString)
MyInt += 1
Console.WriteLine(MyInt)
' The result is "12346".
string MyString = "12345";
int MyInt = int.Parse(MyString);
MyInt++;
Console.WriteLine(MyInt);
// The result is "12346".
L'énumération NumberStyles indique le format autorisé pour une chaîne à analyser. Vous pouvez utiliser cette énumération pour analyser une chaîne contenant un symbole de devise, une virgule décimale, un exposant, des parenthèses, etc. Par exemple, dans la culture en-US, une chaîne contenant une virgule ne peut pas être convertie en nombre entier à l'aide de la méthode Parse si l'énumération NumberStyles.AllowThousands n'est pas passée.
NumberStyles.AllowCurrencySymbol spécifie qu'un nombre doit être analysé comme une devise plutôt que comme une décimale. NumberStyles.AllowDecimalPoint indique qu'une virgule décimale est permise. Les caractères à virgule décimale valides sont déterminés par les propriétés NumberDecimalSeparator ou CurrencyDecimalSeparator de l'objet NumberFormatInfo actif. NumberStyles.AllowThousands indique que les séparateurs de groupe sont permis. Les caractères à séparation de groupes valides sont déterminés par les propriétés NumberGroupSeparator ou CurrencyGroupSeparator de l'objet NumberFormatInfo actif. Pour un tableau complet de types de caractères non numériques valides, consultez la documentation de l'énumération NumberStyles.
L'énumération NumberStyles utilise les caractères spécifiés par la culture en cours pour aider à l'analyse. Si vous ne spécifiez pas de culture en passant un objet CultureInfo ayant pour valeur la culture qui correspond à la chaîne que vous êtes en train d'analyser, la culture associée au thread actif est alors utilisée.
L'exemple de code suivant n'est pas valide et lèvera une exception. Il illustre la façon erronée d'analyser une chaîne contenant des caractères non numériques. Un nouveau CultureInfo est d'abord créé et passé à la méthode Parse pour spécifier que la culture en-US doit être utilisée pour l'analyse.
Imports System.Globalization
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "123,456"
Dim MyInt As Integer = Integer.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyInt)
' Raises System.Format exception.
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = "123,456";
int MyInt = int.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyInt);
// Raises System.Format exception.
Lorsque vous appliquez l'énumération NumberStyles avec l'indicateur AllowThousands, la méthode Parse ignore la virgule qui a déclenché l'exception dans l'exemple précédent. L'exemple de code suivant utilise la même chaîne que l'exemple précédent, mais ne lève aucune exception. Comme dans l'exemple précédent, un nouveau CultureInfo est d'abord créé et passé à la méthode Parse pour spécifier que le séparateur des milliers de la culture en-US est utilisé pour l'analyse.
Imports System.Globalization
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "123,456"
Dim MyInt As Integer = Integer.Parse(MyString, NumberStyles.AllowThousands, MyCultureInfo)
Console.WriteLine(MyInt)
' The result is "123456".
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = "123,456";
int MyInt = int.Parse(MyString, NumberStyles.AllowThousands, MyCultureInfo);
Console.WriteLine(MyInt);
// The result is "123456".