Напоролся на тривиальный, но неприятный подводный камень. Функция Convert.ToDouble() по умолчанию смотрит на разделитель целой и дробной части, который указан в системных настройках. И если в строке разделитель другой, то генерирует exception, например, если конвертировать число 3.14, а в системных настройках в качестве разделителя указана не . (точка), а , (запятая), то программа вывалится с ошибкой.
Решение простое, с помощью второго параметра функции Convert.ToDouble() задать разделитель целой и дробной части. Вот пример функции-обертки над Convert.ToDouble(), с возможностью указания разделителя:
public static double ConvertToDouble(string Value, string DecimalSeparator)
{
NumberFormatInfo format = new NumberFormatInfo();
format.NumberDecimalSeparator=DecimalSeparator;
return Convert.ToDouble(Value, format);
}
На самом деле, с помощью NumberFormatInfo можно задать еще кучу параметров, например, разделитель разрядов, буде такой понадобится.
Pingback: C#, Симпатичное окошко «О программе» | Персональный блог Толика Панкова
Pingback: C#, ввод только цифр (чисел) в текстовое поле (TextBox). | Персональный блог Толика Панкова