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