C # float.tryparse pour la Culture française

j'ai une entrée utilisateur qui peut contenir des valeurs float allant de: 3.06 ou 3,06 La culture nous sommes français et, ainsi, lorsque l'utilisateur entrées 3.06 et je lance un flotteur.tryParse sur cette valeur il ne se convertit pas en 3.06 dans une nouvelle variable (type float)

// inputUsedAmount.Value from UI is : 3.06
float usedAmount = 0.0f;
float.TryParse(inputUsedAmount.Value, out usedAmount);
// returns false

je peux tout simplement faire un remplacement sur le montant saisi à partir de l'INTERFACE utilisateur à partir de "."à",", mais y a-t-il une façon gracieuse/meilleure de le faire à travers la Culture ? Merci

10
demandé sur Murtaza Mandvi 2010-04-27 20:02:10

3 réponses

Vous pouvez utiliser le surcharge qui prend un format de fournisseur. Vous pouvez passer à travers un français de la culture info:

string value;
NumberStyles style;
CultureInfo culture;
double number;

value = "1345,978";
style = NumberStyles.AllowDecimalPoint;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1345,978' to 1345.978.
14
répondu Oded 2010-04-27 16:07:57
float usedAmount;

// try parsing with "fr-FR" first
bool success = float.TryParse(inputUsedAmount.Value,
                              NumberStyles.Float | NumberStyles.AllowThousands,
                              CultureInfo.GetCultureInfo("fr-FR"),
                              out usedAmount);

if (!success)
{
    // parsing with "fr-FR" failed so try parsing with InvariantCulture
    success = float.TryParse(inputUsedAmount.Value,
                             NumberStyles.Float | NumberStyles.AllowThousands,
                             CultureInfo.InvariantCulture,
                             out usedAmount);
}

if (!success)
{
    // parsing failed with both "fr-FR" and InvariantCulture
}
5
répondu LukeH 2011-07-11 09:29:58

vous pouvez passer la culture à l'intérieur TryParse méthode:

public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out float result);
1
répondu Andrew Bezzub 2010-04-27 16:03:58