Напоролся на тривиальный, но неприятный подводный камень. Функция 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). | Персональный блог Толика Панкова