Напоролся на тривиальный, но неприятный подводный камень. Функция 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
можно задать еще кучу параметров, например, разделитель разрядов, буде такой понадобится.
Код на PasteBin
MSDN
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/05/04/c-pr