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.