повышение (TM) путь:
std::string str = boost::lexical_cast<std::string>(dbl);
Стандартный C++ путь:
std::ostringstream strs;
strs << dbl;
std::string str = strs.str();
Примечание : не забывайте #include <sstream>
Для записи: В моем собственном коде я одобряю snprintf (). С массивом символов на локальном стеке, дело не в этом неэффективный. (Ну, возможно, если Вы превысили размер массива и циклично выполнились, чтобы сделать это дважды...)
(я также обернул его через vsnprintf (). Но это стоит мне некоторой проверки типа. Yelp, если Вы хотите код...)
Heh, я просто записал это (не связанный с этим вопросом):
string temp = "";
stringstream outStream;
double ratio = (currentImage->width*1.0f)/currentImage->height;
outStream << " R: " << ratio;
temp = outStream.str();
/* rest of the code */
Вы могли также использовать stringstream.
У Herb Sutter есть превосходное статья о строке, форматирующей . Я рекомендую читать его. Я имею , связал его прежде на ТАК.
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
с внутренне.
// 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);
Если Вы используете 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);
Проблема с lexical_cast заключается в невозможности определить точность. Обычно, если вы конвертируете двойное число в строку, это потому, что вы хотите его распечатать. Если точность будет слишком большой или слишком низкой, это повлияет на ваш результат.