Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование строки "\d+\.\d+" в Double 
V
    Опции темы
CaptainNemo
Дата 12.5.2013, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 5.6.2008
Где: White Russia, Min sk

Репутация: нет
Всего: 9



Подскажите, как преобразовать строку в Double, пробовал через Convert.ToDouble и TryParse() - на выходе получаю 0.

Код

 //Извлекаем из тэга значения координат х и y
            string data = wb.Document.GetElementById("temp").InnerHtml;
            /*
            в строке data - координаты точек
             (147.59729385375977, 82.32423400878905)(147.59750747680664, 82.32300567626952)
             */

            Regex r = new Regex(@"\d+\.\d+", RegexOptions.IgnoreCase);
            Match match = r.Match(data);

            double x;
            string str;

            while (match.Success)
            {
                str = match.ToString(); //тут уже извлеченные из строки координаты, например 147.59729385375977 и т.д....


                Double.TryParse(str, out x);
                //    MessageBox.Show(x.ToString()); //тут 0 и 1 ????

                match = match.NextMatch();
            }

            List<Point> dots = new List<Point>();


Спасибо!
PM MAIL WWW ICQ Skype GTalk   Вверх
Arantir
Дата 12.5.2013, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



Потому что у нас в "не-западной-Европе" десятичные дроби пишутся через запятую. 

Как это не парадоксально, но...
Код

double x;
Double.TryParse("147,59729385375977", out x);
// x == 147,59729385376


Наверное, в .NET это просто зависит от текущей локали (региональных установок) компьтера, так как на западе и в целом в англоязычных странах чаще используется именно точка. 
Англ. доки с точкой http://msdn.microsoft.com/en-us/library/67...9(v=vs.71).aspx
Русские доки с запятой http://msdn.microsoft.com/ru-RU/library/67...9(v=vs.90).aspx

Это сообщение отредактировал(а) Arantir - 12.5.2013, 15:09


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
diadiavova
Дата 12.5.2013, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Arantir @  12.5.2013,  16:06 Найти цитируемый пост)
Наверное, в .NET это просто зависит от текущей локали

По умолчанию так и есть, но можно использовать перегрузку метода
http://msdn.microsoft.com/en-us/library/3s27fasw.aspx
В качестве форматпровайдера можно использовать 
http://msdn.microsoft.com/en-us/library/sy...formatinfo.aspx
или
http://msdn.microsoft.com/en-us/library/sy...ultureinfo.aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
CaptainNemo
Дата 13.5.2013, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 5.6.2008
Где: White Russia, Min sk

Репутация: нет
Всего: 9



Arantir, diadiavova спасибо! Благодаря Вашей помощи, решил задачу примерно так.... Все работает ОК

Код

using System.Globalization;
            NumberStyles style;
            CultureInfo culture;

            style = NumberStyles.AllowDecimalPoint;
            culture = CultureInfo.CreateSpecificCulture("en-GB");

........
         while (match.Success)
            {
                i++;
                str = match.ToString(); 
                flag = i % 2;

                if (flag == 1)
                {

                    double.TryParse(str, style, culture, out x);
                   
                    dots.Add(x);
                }
                else
                {
                    double.TryParse(str, style, culture, out y);
                    dots.Add(y);
                    
                }
                
                match = match.NextMatch();
            }


Однако наткнулся на еще одни подводный камень. В C# Point можно наполнять только переменными int. Есть еще PointF которым можно присваивать значения типа float. А мне надо Double (большая часть приложения я написал на JavaScript - googleMapsApi). Буду разбираться, как работать со списками в C#
Спасибо!!! 

Это сообщение отредактировал(а) CaptainNemo - 13.5.2013, 00:30
PM MAIL WWW ICQ Skype GTalk   Вверх
diadiavova
Дата 13.5.2013, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(CaptainNemo @  13.5.2013,  01:26 Найти цитируемый пост)
Есть еще PointF которым можно присваивать значения типа float. А мне надо Double

PointF используется для указания точки для вывода графики на графические поверхности. Значение координат указывают на пиксели, их дробная часть - есть дробная часть пикселя. Я полагаю двойная точность в данном случае излишня. Если надо взаимодействовать с апи, то создай свою структуру и используй ее. Несложно ведь создать структуру с двумя свойствами. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.