C# float.tryparse for French Culture

后端 未结 3 430
感情败类
感情败类 2020-12-11 01:47

I have a user input which can contain float values ranging from : 3.06 OR 3,06 The culture we are in is French and thus when the user inputs 3.06 and I run a float.tryParse

相关标签:
3条回答
  • 2020-12-11 02:27
    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
    }
    
    0 讨论(0)
  • 2020-12-11 02:48

    You can use the overload that takes a format provider. You can pass through a French 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.
    
    0 讨论(0)
  • 2020-12-11 02:49

    You can pass culture inside TryParse method:

    public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out float result);
    
    0 讨论(0)
提交回复
热议问题