С#: Универсальный Double.Parse

Данная функция достаточно часто используются разработчиками, поэтому стоит быть внимательным. Весь камень предкновения заключается в том, что для каких-то языковых настроек разделителем дробной части от целой является символ точка, а для каких-то символ запятой.
В связи с этим при вызове функции Double.Parse для числа «22.22», для локали где разделителем является «,» произойдет выброс исключения. Для решения данной проблемы можно использовать несколько подходов, я приведу пример решения данной задачи, который, на мой взгляд, является оптимальным.

public static class Helpers
{
        public static double ParseToDouble(string value)
        {
            double result = Double.NaN;
            value = value.Trim();
            if (!double.TryParse(value, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.GetCultureInfo("ru-RU"), out result))
            {
                if (!double.TryParse(value, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.GetCultureInfo("en-US"), out result))
                {
                    return Double.NaN;
                }
            }
            return result;
        }
}

Теперь произвести конвертацию из string в double можно вызовом функции Helpers.ParseToDouble. Вне зависимости от локали системы функция переведет Вашу строку в число с плавающей точкой или вернет Double.NaN, если переданная строка не является числом.

Запись опубликована в рубрике C# с метками , , , , , , , . Добавьте в закладки постоянную ссылку.