Как я преобразовываю двойное в строку в C++?

165
задан Bill the Lizard 11 December 2015 в 19:41
поделиться

10 ответов

повышение (TM) путь:

std::string str = boost::lexical_cast<std::string>(dbl);

Стандартный C++ путь:

std::ostringstream strs;
strs << dbl;
std::string str = strs.str();

Примечание : не забывайте #include <sstream>

179
ответ дан Black 23 November 2019 в 21:05
поделиться

Смотрите на sprintf() и семья.

2
ответ дан bluish 23 November 2019 в 21:05
поделиться

можно хотеть считать мою предшествующую регистрацию на ТАК. (Версия Macro'ed с временным объектом ostringstream.)

Для записи: В моем собственном коде я одобряю snprintf (). С массивом символов на локальном стеке, дело не в этом неэффективный. (Ну, возможно, если Вы превысили размер массива и циклично выполнились, чтобы сделать это дважды...)

(я также обернул его через vsnprintf (). Но это стоит мне некоторой проверки типа. Yelp, если Вы хотите код...)

2
ответ дан Community 23 November 2019 в 21:05
поделиться

Heh, я просто записал это (не связанный с этим вопросом):

string temp = "";
stringstream outStream;
double ratio = (currentImage->width*1.0f)/currentImage->height;
outStream << " R: " << ratio;
temp = outStream.str();

/* rest of the code */
4
ответ дан Vinko Vrsalovic 23 November 2019 в 21:05
поделиться

Вы могли также использовать stringstream.

4
ответ дан Firas Assaad 23 November 2019 в 21:05
поделиться

У Herb Sutter есть превосходное статья о строке, форматирующей . Я рекомендую читать его. Я имею , связал его прежде на ТАК.

7
ответ дан Community 23 November 2019 в 21:05
поделиться

sprintf хорошо, но в C++, лучше, более безопасный, и также немного более медленный способ сделать преобразование с stringstream:

#include <sstream>
#include <string>

// In some function:
double d = 453.23;
std::ostringstream os;
os << d;
std::string str = os.str();

можно также использовать Повышение. LexicalCast:

#include <boost/lexical_cast.hpp>
#include <string>

// In some function:
double d = 453.23;
std::string str = boost::lexical_cast<string>(d);

В обоих экземплярах, str должен быть "453.23" позже. LexicalCast имеет некоторые преимущества, в которых он гарантирует, что преобразование завершено. Это использует stringstream с внутренне.

10
ответ дан coppro 23 November 2019 в 21:05
поделиться
// The C way:
char buffer[32];
snprintf(buffer, sizeof(buffer), "%g", myDoubleVar);

// The C++03 way:
std::ostringstream sstream;
sstream << myDoubleVar;
std::string varAsString = sstream.str();

// The C++11 way:
std::string varAsString = std::to_string(myDoubleVar);

// The boost way:
std::string varAsString = boost::lexical_cast<std::string>(myDoubleVar);
185
ответ дан Adam Rosenfield 23 November 2019 в 21:05
поделиться

Если Вы используете C++, избегаете sprintf. Это - UNC ++ y и имеет несколько проблем. Stringstreams являются предпочтительным методом, предпочтительно инкапсулировавшим как в Повышение. LexicalCast, который может быть сделан довольно легко:

template <typename T>
std::string to_string(T const& value) {
    stringstream sstr;
    sstr << value;
    return sstr.str();
}

Использование:

string s = to_string(42.5);
24
ответ дан Konrad Rudolph 23 November 2019 в 21:05
поделиться

Проблема с lexical_cast заключается в невозможности определить точность. Обычно, если вы конвертируете двойное число в строку, это потому, что вы хотите его распечатать. Если точность будет слишком большой или слишком низкой, это повлияет на ваш результат.

6
ответ дан 23 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: