С++ atoi() возвращает только первую цифру

У меня странная проблема с atoi()

Я делаю преобразование следующим образом:

cout<<atoi(mystring.c_str())<<endl;

mystring — это строка с чем-то вроде 3245524.

Приведенный выше код вернет только 3 в стандартный вывод.

Теперь, если я уменьшу строку, например. меньше 1000000, то я возвращаю весь номер на стандартный вывод.

Любые идеи, что вызывает эту проблему? Это все еще значительно ниже предела C++ int, поэтому это не переполнение.

РЕДАКТИРОВАТЬ, некоторая дополнительная информация. Когда я упрощаю команду до простого:

cout<<mystring.c_str()<<endl;

Стандартный вывод выглядит примерно так: 3.24552e+06.

Проблема связана с этим?


person user788171    schedule 12.02.2014    source источник
comment
Представьте полный компилируемый пример, демонстрирующий проблему.   -  person Benjamin Lindley    schedule 12.02.2014
comment
Итак, согласно вашему редактированию, mystring на самом деле совсем не похоже на 3245524.   -  person Benjamin Lindley    schedule 12.02.2014
comment
да . закончится атои через 3   -  person clancer    schedule 12.02.2014
comment
Где atoi вступает в игру здесь?   -  person tier1    schedule 12.02.2014
comment
Почему мы используем atoi() для числа с плавающей запятой? Или еще лучше: почему мы храним числа с плавающей запятой в виде строк?   -  person John3136    schedule 12.02.2014
comment
Ах, извините за весь этот шум, у меня был промежуточный шаг, который преобразовывал int в число с плавающей запятой, и когда числа с плавающей запятой превышают 1000000, C ++ автоматически записывает их в научную нотацию, и в основном . убивал атои. Переключение на atof исправляет это.   -  person user788171    schedule 12.02.2014
comment
Почему бы вам не использовать std::istringstream или strtod, которые позволяют проверить неудачное преобразование?   -  person nodakai    schedule 12.02.2014


Ответы (1)


Из вашего редактирования:
Содержимое mystring "3.24552e+06" , т. е. научное (с плавающей запятой) строковое представление для числа 3245520.
Следовательно, atoi анализирует первое целое число, которое он находит в mystring, как ожидаемо, то есть: 3.
Если строка mystring содержит "3245520", ваш вызов atoi вернет целое число 3245520.

person Martin J.    schedule 12.02.2014