C # float.tryparse для французской культуры - PullRequest
10 голосов
/ 27 апреля 2010

У меня есть пользовательский ввод, который может содержать значения с плавающей запятой в диапазоне: 3.06 ИЛИ 3,06 Мы используем французскую культуру, поэтому, когда пользователь вводит 3.06, а я запускаю float.tryParse для этого значения, оно не преобразуется в 3.06 в новую переменную (тип float)

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

Я могу просто заменить сумму, введенную в интерфейсе пользователя из "." на «,», но есть ли изящный / лучший способ сделать это через Культуру? Спасибо

Ответы [ 3 ]

15 голосов
/ 27 апреля 2010

Вы можете использовать перегрузку , которая принимает поставщика формата. Вы можете пройти через информацию о французской культуре:

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.
6 голосов
/ 27 апреля 2010
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
}
1 голос
/ 27 апреля 2010

Вы можете передать культуру внутрь TryParse метод:

public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out float result);
...