Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с atof, что случилось 
V
    Опции темы
UnixBeginner
Дата 24.2.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.11.2005
Где: Россия, г. Калини нград

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



есть такое:
Код

for (int i = 0; i < count - 2; ++i)
{
    list<char *> * val = database->DB_Result_values(i);
    list<char *>::iterator iter = val->begin();
                
    cout << "\nval = " << *iter << "  " << atof(*iter);
        
         //data_d - list<double> *
    (*data_d)->push_back(atof(*iter));
    delete val;
}

результат:
Код

val = -50.5199  -50
val = 150.126  150


почему не переводит в double?
PM MAIL WWW ICQ   Вверх
UnixBeginner
Дата 24.2.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.11.2005
Где: Россия, г. Калини нград

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



Я разобрался: т.к. у меня в строке - разделительный символ - ".", а для русского языка это ",".
Поэтому соответственно новый вопрос - как сделать так, чтобы на время выполнения программы - разделительным символом была именно запятая а не точка?
PM MAIL WWW ICQ   Вверх
Partizan
Дата 24.2.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



существует такая глобальная переменная -- DecimalSeparator....

http://forum.vingrad.ru/index.php?showtopi...ecimalseparator
http://forum.vingrad.ru/index.php?showtopi...ecimalseparator


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Romikgy
Дата 24.2.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Partizan, имхо это для борланда


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
UnixBeginner
Дата 24.2.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.11.2005
Где: Россия, г. Калини нград

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



Цитата(Romikgy @ 24.2.2006, 14:17 Найти цитируемый пост)
Partizan, имхо это для борланда

Вот именно. Впринципе я попробовал
Код

setlocale(LC_ALL, "decimal_point=\".\"");

но что-то не помогло.
Может есть еще идеи?

PS: компилятор - MinGW(gcc)

PM MAIL WWW ICQ   Вверх
Romikgy
Дата 24.2.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Мож это надо юзать?
Код

BOOL SetLocaleInfo(

    LCID Locale,    // locale identifier
    LCTYPE LCType,    // type of information to set
    LPCTSTR lpLCData    // pointer to information to set
   );

Добавлено @ 15:12
Код

char dc[1];
dc[0]='.';
SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SDECIMAL,dc);



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
UnixBeginner
Дата 24.2.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.11.2005
Где: Россия, г. Калини нград

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



Вроде это не стандартная библиотека С++? Этож относится только к Windows?
точно, это WinAPI, а мне нужно независимый от ОС способ

Это сообщение отредактировал(а) UnixBeginner - 24.2.2006, 15:36
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 24.2.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Цитата(UnixBeginner @ 24.2.2006, 14:31 Найти цитируемый пост)
точно, это WinAPI, а мне нужно независимый от ОС способ

Тогда сам разбирай
Добавлено @ 15:57
Код

char dc[1];
dc[0]='.';
setlocale(LC_NUMERIC,dc);


Добавлено @ 15:57
Может так smile smile

Это сообщение отредактировал(а) Romikgy - 24.2.2006, 15:58


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Lotrex
Дата 26.2.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 9.2.2006
Где: Казань

Репутация: 2
Всего: 3



Имхо, все у UnixBeginner преобразуется, тока выводится не правильно.

UnixBeginner, попробуйте вот это:
Код

cout << "\nval = " << *iter << "  " << atof(*iter);

заменить на это:
Код

cout << "\nval = " << *iter << "  " << fixed << atof(*iter);


Манипулятор fixed указывает, что надо выводить число с плавающей точкой "in fixed-point notation" (цитата из help-a для BCB5):
Цитата

fixed  Generates floating-point output in fixed-point notation


PM MAIL ICQ   Вверх
UnixBeginner
Дата 26.2.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 10.11.2005
Где: Россия, г. Калини нград

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



не выводит так:
Код

cout << "\nval = "  << fixed << atof("10.2");

выводит:
Код

10.2000000000000

а если так:
Код

cout << "\nval = "  << fixed << atof("10,2");

выводит:
Код

10.0000000000000

Судя по всему здесь нет человека, который бы мне помог, поэтому я проблему уже решил.
Решение для тех, кто столкнулся с токой же проблемой:
Код

template< typename T >
T strtonumber(char * str)
{
    istringstream istr(str);
    T value;
    istr >> value;
    return value;
}

PM MAIL WWW ICQ   Вверх
Lotrex
Дата 26.2.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 9.2.2006
Где: Казань

Репутация: 2
Всего: 3



Цитата(UnixBeginner @ 26.2.2006, 13:01 Найти цитируемый пост)
не выводит так:
Код

cout << "\nval = "  << fixed << atof("10.2");

выводит:
Код

10.2000000000000

а если так:
Код

cout << "\nval = "  << fixed << atof("10,2");

Код

10.0000000000000


Все правильно, потому что для функции atof есть только один разделитель - точка, запятую она уже не понимает. А Вам и так, и сяк надо было? Или только с запятой? smile

Это сообщение отредактировал(а) Lotrex - 26.2.2006, 15:45
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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