Обновление для C ++ 11
Как C++11правило, преобразование строки в число и наоборот встроено в стандартную библиотеку. Все следующие функции присутствуют в <string>(согласно параграфу 21.5).
строка в число
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Каждый из них принимает на вход строку и пытается преобразовать ее в число. Если не удалось создать допустимое число, например, из-за отсутствия числовых данных или из-за того, что число выходит за пределы диапазона для типа, создается исключение ( std::invalid_argumentили std::out_of_range).
Если преобразование прошло успешно, но idxне было 0, idxбудет содержаться индекс первого символа, который не использовался для декодирования. Это может быть индекс за последним символом.
Наконец, целочисленные типы позволяют указать основание, для цифр больше 9 предполагается алфавит ( a=10до z=35). Вы можете найти дополнительную информацию о точном форматировании, которое можно проанализировать здесь для чисел с плавающей запятой , целых чисел со знаком и целых чисел без знака .
Наконец, для каждой функции есть перегрузка, которая принимает в std::wstringкачестве первого параметра.
числовой в строку
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Это более просто: вы передаете соответствующий числовой тип и получаете обратно строку. Для параметров форматирования вам следует вернуться к параметру stringsream C ++ 03 и использовать манипуляторы потоков, как описано в другом ответе здесь.
Как отмечено в комментариях, эти функции возвращаются к точности мантиссы по умолчанию, которая, вероятно, не является максимальной точностью. Если для вашего приложения требуется более высокая точность, также лучше вернуться к другим процедурам форматирования строк.
Также определены похожие функции с именами to_wstring, они возвращают std::wstring.