Double parsing avec le format de culture

J’ai un double numéro sous forme de chaîne. Le nombre est

202.667,40

Qui est 202667.4

Comment puis-je parsingr cette chaîne pour obtenir la valeur telle que: Double.Parse (“202.667,40”,? Quoi ici), ou toute autre méthode pour obtenir la valeur serait génial. Merci

Tout d’abord, vous devez savoir de quelle culture provient ce numéro, puis:

CultureInfo culture = new CultureInfo("de"); // I'm assuming german here. double number = Double.Parse("202.667,40", culture); 

Si vous souhaitez parsingr à l’aide de la culture de thread actuelle, celle par défaut définie pour l’utilisateur actuel:

 double number = Double.Parse("202.667,40", CultureInfo.CurrentCulture); 

Je pense avoir trouvé une solution ne nécessitant pas de culture. En utilisant un NumberFormatInfo, vous pouvez forcer un format, peu importe la culture:

 // This is invariant NumberFormatInfo format = new NumberFormatInfo(); // Set the 'splitter' for thousands format.NumberGroupSeparator = "."; // Set the decimal seperator format.NumberDecimalSeparator = ","; 

Puis plus tard:

 System.Diagnostics.Debug.WriteLine(double.Parse("202.667,40", format))); 

Les sorties:
202667,4

Bien entendu, cette sortie (inner toSsortingng ()) peut différer selon la culture (!)
Notez que le remplacement de l’entrée par “202,667,40” entraînera une erreur d’parsing. Le format doit donc correspondre à l’entrée prévue.

J’espère que ça aide quelqu’un ..

Vous pouvez utiliser Double.Parse (votre numéro, CultureInfo.CurrentCulture) et définir CurrentCulture en conséquence avec Thread.CurrentThread.CurrentCulture.

Exemple:

 Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES"); 

puis plus tard

 Double.Parse(your_number, CultureInfo.CurrentCulture); 

Notez que si vous affectez explicitement la culture à CurrentThread, cela ne s’applique qu’à ce thread.

Pour plus de flexibilité, vous pouvez définir NumberDecimalSeparator

  ssortingng number = "202.667,40"; double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}}); 

Au lieu d’avoir à spécifier des parameters régionaux dans toutes les parsings, je préfère définir des parameters régionaux à l’échelle de l’application. Toutefois, si les formats de chaîne ne sont pas cohérents dans l’application, cela risque de ne pas fonctionner.

 CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT"); CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT"); 

Si vous définissez ceci au début de votre application, toutes les doubles parsings s’attendent à une virgule comme séparateur décimal.

 var val=double.Parse( yourValue, CultureInfo.InvariantCulture); 

http://www.erikschierboom.com/2014/09/01/numbers-and-culture/

 Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE")); 

Au lieu de de-DE, utilisez la culture dans laquelle se trouve la chaîne.