none
Части строки привести к типу float RRS feed

  • Вопрос

  • Приветствую!

    Начал изучение С #, столкнулся с вопросом.

    Не вдаваясь в подробности: есть строка чисел, которую разбиваю с помощью split, получившиеся элементы массива требуется привести к какому-либо (не обязательно float на самом деле) типу с точкой.

    Нашел пример только для Int32.Parse, возможно кто-нибудь подскажет аналог, только для "дробного" типа?

    С уважением.


    28 ноября 2014 г. 11:01

Ответы

  • Если неверный формат входной строки не является исключающей ситуацией, например Вы обрабатываете пользовательский ввод (а пользователь, как известно, очень не надёжное устройство ввода), то разумнее использовать TryParse:
    float number;
    if(float.TryParse(value,out number)) {
        Console.WriteLine("Converted '{0}' to {1}.",value,number);
    } else {
        Console.WriteLine("Unable to convert '{0}'.",value);
    }
    Если же Вы обрабатываете некий файл, то разумнее использовать перегрузку Parse/TryParse, которая позволяет указать IFormatProvider, чтобы разделитель целой и дробной части не зависил от языковых параметров пользователя.
    float number=float.Parse(value,CultureInfo.InvariantCulture);
    • Помечено в качестве ответа Evgenii Fedorov 28 ноября 2014 г. 20:52
    28 ноября 2014 г. 12:03

Все ответы

  • Прошу прощения, поторопился.

    Помогла включенная голова)

    Для тех кто возможно так-же затупит:

    private static void Convert(string value)
            {
                try
                {
                    float number = float.Parse(value);
                    Console.WriteLine("Converted '{0}' to {1}.", value, number);
                }
                catch (FormatException)
                {
                    Console.WriteLine("Unable to convert '{0}'.", value);
                }
            }

    Как оказалось, самый просто вариант бывает самым верным. Иногда.

    С уважением.


    28 ноября 2014 г. 11:13
  • Если неверный формат входной строки не является исключающей ситуацией, например Вы обрабатываете пользовательский ввод (а пользователь, как известно, очень не надёжное устройство ввода), то разумнее использовать TryParse:
    float number;
    if(float.TryParse(value,out number)) {
        Console.WriteLine("Converted '{0}' to {1}.",value,number);
    } else {
        Console.WriteLine("Unable to convert '{0}'.",value);
    }
    Если же Вы обрабатываете некий файл, то разумнее использовать перегрузку Parse/TryParse, которая позволяет указать IFormatProvider, чтобы разделитель целой и дробной части не зависил от языковых параметров пользователя.
    float number=float.Parse(value,CultureInfo.InvariantCulture);
    • Помечено в качестве ответа Evgenii Fedorov 28 ноября 2014 г. 20:52
    28 ноября 2014 г. 12:03
  • Спасибо, особенно за IFormatProvider, навело на мысли.

    Но в данном случае требуется минимум "усложнений", т.к. при приеме готового кода проходят претензии о несоответствии кода и знаний того, кто его написал. Проще говоря, чем больше кажется, что код написан новичком, тем лучше. Меньше вопросов потом зададут.

    С уважением.

    28 ноября 2014 г. 12:40