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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HELP, преобразование CHAR -> FLOAT 
:(
    Опции темы
nas_alex
  Дата 17.6.2004, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



помогите!!!!

есть строка длинной 15 символов, нужно преобразовать во Float.
преобразую в цикле несколько строк.

char str="1256.32";
float fstr;
fstr=atof(str);


после преобразования получается непонятное число типа -17451255
причем какие-то преобразоваваются,а какие-то нет....

почему?????
PM MAIL   Вверх
Конструктор
Дата 17.6.2004, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

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



Может от того, что atof double возвращает а не float?
Попробуй...

Код

char str="1256.32";
double fstr; //<-----
fstr=atof(str);


И еще, может ты результат смотришь не так? Надежнее всего через дебаггер кацца.

PM MAIL WWW ICQ   Вверх
Олег М
Дата 17.6.2004, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

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



У точно так объявлено: char str="1256.32";?
Надо вот так
char *str="1256.32";
или
char str[]="1256.32";


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 13.6.2004
Где: Молдова

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



а <string.h> есть?


--------------------
Who dares, wins. (с) Solid Snake
PM MAIL ICQ YIM MSN   Вверх
bel_nikita
Дата 19.6.2004, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Олег М - прав, поитера не хватает

Цитата
после преобразования получается непонятное число типа -17451255
Все нормально, формат выводе просто не тот exclamation.gif
Вот:
Цитата
  char* str="1256.32";
  float fstr;
  fstr=atof(str);
  printf("\nfstr=%f",fstr); //1236.32000

При выводе требуется ставить %f, а не %d


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
gepard
Дата 19.6.2004, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
<string.h>

Зачем?


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Guest
Дата 23.5.2005, 18:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Почему результатом данной программы будет 0.000000
Код

#include <stdio.h>
main(int argc, char *argv[]){

printf("%f\n",atof(argv[1]));
}

  Вверх
kometa_triatlon
Дата 23.5.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хороший вопрос. А почему бы и нет? Это же элемент массива аргументов, передаваемых в программу. Значит ничего не передается, вот и 0.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Mayk
Дата 25.5.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Сам бился над этой проблемой пару недель назад. smile

Ну во-первых, если argc=1(т е есть только имя проги), то 0 может и не получиться - у меня получилось Segmentation Fault. Поэтому полагаем, что argc > 1, argv[1] != "0", stdlib.h(по C99 "double atof(const char* nptr)" расположен в stdlib.h) не подключен.

Что тогда? До меня только сейчас дошло smile ! А тогда, друзья мои, чтоб я провалился, если Си не думает так: "функция atof... Я ее не знаю. Я вижу, что ей передают const char*. Ладно, поверю... Так как я не могу определить тип возвращаемой функции, то я решу что этот тип равен int. Мне всегда нравились int, раньше можно было даже его не везде указывать, а раз я так люблю инт, то эта фунцкция определенно определена как "int atof(const char*)". Далее она думает так: "ага! какой-то умник написал float f = atof(). Это не хорошо! Вот у меня наисано, что atof возвращает int! конвертировать надо, ну да ладно.", далее она("она", тк "программа") берет и запихивает содержимое EAX(в котором возвращаются целочисленные значения) в память переменной типа float. Но ведь настоящее возвращаемое значение лежит не в EAX. Дробные числа возвращаются в ST(0).

Так что пример atof показывает что перевод типов C не есть быть хорошо.

А вот компилятор С++ думает "функция atof... Я ее не знаю. Я не знаю что ей передают в качестве параметров в общем случае. Я не знаю, что она возвращает. Я ничего не знаю, этот юзер держит меня за телепата!? Сейчас я ему такого телепата покажу!". И, радостно ругаясь, C++ кричит об ошибке(или о нескольких ошибках, если разработчики компилятора ЛЮБИЛИ свое дело).

Так что "float atof(const char* nptr)" вам нужно указать, если stdlib.h не хотите указывать. И поосторожней с переводом типов.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
gepard
Дата 26.5.2005, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



На самом деле, перевод long->char - просто. А потом, по его средствам и char->float(double) ещё порще.


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 27.12.2005, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Mayk, ну у тебя и фантазия smile

Я думаю, все проще...

Цитата
Each function returns the double, int, __int64, or long value produced by interpreting the input characters as a number. The return value is 0 (for atoi, _atoi64, _wtoi, and _wtoi64), 0L (for atol and _wtol), or 0.0 (for atof and _wtof) if the input cannot be converted to a value of that type.


Добавлено @ 08:37
Т.е. "она" думает так: конвертировать в double строку "абвгдеёжз"? Легко!
Там же цикл, надо полагать, где к исходному числу (0) добавляются распознанные цифры * на разряд...


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


Шустрый
*


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

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



lynx_916 так и зачем там sitring.h?


Mayk
Кааим компилятором C ты компилил?
у меня на 2-х (Builder и MinGW) прога в сигфолт вылетает...
PM MAIL   Вверх
profispb
Дата 27.12.2005, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А как насчет такого преобразования
n=float(char);
printf("Преобразование =%f",n);

smile
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
sergejzr
Дата 28.12.2005, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



profispb, сам придумал иль подсказал кто?smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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