Данная функция достаточно часто используются разработчиками, поэтому стоит быть внимательным. Весь камень предкновения заключается в том, что для каких-то языковых настроек разделителем дробной части от целой является символ точка, а для каких-то символ запятой.
В связи с этим при вызове функции 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, если переданная строка не является числом.