А конкретнее, как преобразовать строку в число или как заменить точку на запятую, например "2.56", если разделитель разрядов в системе запятая.
Мнимое решение
Double tmp = Double.Parse(str.Replace('.', ','));
т.к. если в системе по умолчанию установленна точка а не запятая то мы опять получим исключение.
Работающее решение
Сначала мы пытаемся превратить строку в число с помощью текущих региональных настроек, если не удается заменяем точки в строке на запятые
Double tmp;
if (Double.TryParse(str, out tmp) == false)
{
Double.TryParse(str.Replace('.', ','), out tmp);
}
Улучшенное работающее решение
В данном случае мы сначала подготавливаем строку, потом пытаемся превратить её в число если не удается то мы меняем не строку а параметры региональных настроек
#region GetDoubleFromString(String aStr)
private static Double GetDoubleFromString(String aStr)
{
// Подготавливаем строку
aStr = aStr.Trim(new char[] {'(', ')', ' '});
// Временная переменная
Double tmpd = 0;
// Получаем текущие настройки
var format = new System.Globalization.NumberFormatInfo();
// Пытаемся преобразовать строку в число
if (!Double.TryParse(aStr, NumberStyles.Float, format, out tmpd))
{
if (format.NumberDecimalSeparator == ",")
format.NumberDecimalSeparator = ".";
else if (format.NumberDecimalSeparator == ".")
format.NumberDecimalSeparator = ",";
// Если всеравно не удалось то возвращаем -1
if (!Double.TryParse(aStr, NumberStyles.Float, format, out tmpd))
return -1;
}
return tmpd;
}
#endregion
P.S. Таким образом замена точки в строке, при преобразовании строки в число, была решена окончательно :)