1
votes

La conversion d'un nombre avec un point et une virgule en double échouera

ayant une chaîne qui ressemble à "1.900,00". Comment pourrais-je formater cette chaîne avec une décimale de 1900?

En utilisant:

decimal.TryParse("1.900,00", out var vkp)

me donnera un faux résultat. Comment puis-je gérer cela?

Voici une URL vers le compilateur C # en ligne: https: // dotnetfiddle. net / B5EyyC


3 commentaires

NumberStyles.AllowThousands


@CodeCaster J'ai essayé: decimal.TryParse ("1.900,00", NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out value1); Ça ne marche pas.


La culture invariante utilise , comme séparateur de milliers et . comme séparateur entre le nombre entier et la partie fractionnaire.


4 Réponses :


0
votes

essayez ceci:

        string s = "1.900,00";
        s = s.Substring(0, s.LastIndexOf(",")).Replace(".", "") + "." + s.Substring(s.LastIndexOf(",") + 1);
        decimal vkp = 0;
        decimal.TryParse(s, out vkp);


0 commentaires

0
votes

Je suppose que vous pouvez essayer ce qui suit:

string dsep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator

Si vous avez besoin d'une vérification plus infaillible, vous pouvez essayer de créer une fonction qui vérifie si la chaîne contient ou non un caractère ','.

public static bool ToDouble(string s, out double d)
{
   if (s.Contains(","))
      return double.TryParse(s.Split(",")[0].Replace(".", ""), out d);

   return double.TryParse(s, out d);
}

Vous pouvez également obtenir le séparateur décimal de vos paramètres de localisation via:

string number = "1.900,00";
decimal.TryParse(number.Split(",")[0].Replace(".",""), out var vkp);


0 commentaires

4
votes

Vous pouvez essayer d'utiliser un CultureInfo qui utilise '.' comme séparateur des milliers et ',' comme séparateur décimal (par exemple "de-DE" ). Et aussi les NumberStyles appropriés .

string input = "1.900,00";
decimal.TryParse(input, 
    NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint, 
    CultureInfo.GetCultureInfo("de-DE"), out var output);

Vous pouvez même créer votre propre instance de NumberFormatInfo où vous pouvez spécifier NumberDecimalSeparator et NumberGroupSeparator comme vous le souhaitez .


0 commentaires

0
votes

Decimal.TryParse doc

//using System.Globalization;   
NumberStyles style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
CultureInfo culture = CultureInfo.CreateSpecificCulture("es-ES");               
Decimal vkp;        
Decimal.TryParse("1.900,00", style, culture, out vkp);


0 commentaires