C# Про конвертирование строки в Double (или любой другой тип с плавающей запятой)
Запись от stpigidy размещена 24.05.2018 в 19:05
Показов 3875
Комментарии 10
Метки c#, конвертирование, строки, числа с плавающей точкой
|
Напоролся на тривиальный, но неприятный подводный камень. Функция Convert.ToDouble() по умолчанию смотрит на разделитель целой и дробной части, который указан в системных настройках. И если в строке разделитель другой, то генерирует exception, например, если конвертировать число 3.14, а в системных настройках в качестве разделителя указана не . (точка), а , (запятая), то программа вывалится с ошибкой. Решение простое, с помощью второго параметра функции Convert.ToDouble() задать разделитель целой и дробной части. Вот пример функции-обертки над Convert.ToDouble(), с возможностью указания разделителя:
Код на PasteBin Источник MSDN Оригинал заметки на моем сайте: http://tolik-punkoff.com/2018/... -zapyatoj/ | |||||
Метки c#, конвертирование, строки, числа с плавающей точкой
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 10
Комментарии
-
Запись от Rius размещена 25.05.2018 в 06:17
-
Тоже вариант. Но лучший ли, ИМХО, зависит от ситуации. В моем случае сам задаешь разделитель и контролируешь процесс.Запись от stpigidy размещена 25.05.2018 в 18:34
-
TryParse проверяет, можно ли вообще преобразовать, если нет - возвращает false. А Convert.ToDouble() при невозможности просто выбрасывает исключение.
В приложении должна быть одна культура, известная пользователю. Это культура всего интерфейса. Указывать формат отдельно разделителя ни к чему.
Именно точка используется при сохранении данных в файлы и документы для последующего считывания на этой или иной машине. В этом случае применяют именно инвариантную культуру с точкой в качестве разделителя.Запись от Rius размещена 25.05.2018 в 18:39
-
Вот в этом моменте, меня учили, что это сишный подход. В C# принято проверять исключения (может меня неправильно учили). В остальном - благодарю за комментарий.
Сообщение от Rius
Запись от stpigidy размещена 26.05.2018 в 16:02
-
Запись от Avazart размещена 26.05.2018 в 21:42
-
Запись от Rius размещена 26.05.2018 в 22:41
-
вообще - в современном программировании, всякая "культурозависимость" это адское д..нище, способствующее только появлению на ровном месте быдло- и г-кода! Хорошо б принять такой стандарт, где разделитель для дробной части всегда один и тот же, а в char'е всегда 1 байт!
Тьфу, накипело.Запись от stpigidy размещена 30.05.2018 в 16:25
-
Сделали же так с метрической системой! А то до сих пор бы занимались церебральным сексом, переводя пуды в фунты! Так что вообще поддержка "культуры", это гадость, "культура" должна умереть как класс (а так же как тип, объект, переменная и константа).
(продолжаю кипеть, но уже по другому поводу)Запись от stpigidy размещена 30.05.2018 в 16:32
-
Запись от Rius размещена 30.05.2018 в 17:51
-
Запись от Avazart размещена 30.05.2018 в 18:58


