190

double を文字列として保存する必要があります。表示したい場合に使用できることはわかってprintfいますが、後でマップに保存できるように文字列変数に保存したいだけです(keyではなくvalueとして)。

4

17 に答える 17

213
// 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);
于 2008-12-01T20:39:48.850 に答える
193

ブースト (tm)方法:

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

標準 C++の方法:

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

:忘れないでください#include <sstream>

于 2008-12-01T20:42:11.263 に答える
137

標準のC++11の方法(出力形式を気にしない場合):

#include <string>

auto str = std::to_string(42.5); 

to_stringは、 N1803(r0)、N1982(r1)、およびN2408(r2)の「SimpleNumericAccess 」で導入された新しいライブラリ関数です。stod逆の操作を行う機能もあります。

とは異なる出力形式が必要な場合は、他の回答に示されているように、またはメソッドを"%f"使用してください。snprintfostringstream

于 2011-11-04T19:09:27.623 に答える
30

C++11 ではstd::to_stringを使用できます

double d = 3.0;
std::string str = std::to_string(d);
于 2017-03-27T12:35:09.267 に答える
24

C++ を使用する場合は、sprintf. これは非 C++y であり、いくつかの問題があります。Stringstreams は最適な方法であり、非常に簡単に実行できるBoost.LexicalCastのようにカプセル化されていることが望ましいです。

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

使用法:

string s = to_string(42.5);
于 2008-12-01T20:41:01.703 に答える
11

sprintfは問題ありませんが、C++ では、変換を行うためのより適切で、より安全で、少し遅い方法は次のstringstreamとおりです。

#include <sstream>
#include <string>

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

Boost.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内部で s を使用します。

于 2008-12-01T20:41:52.993 に答える
10

C++ String Toolkit Libaryを調べます。同様の回答を他の場所に投稿しました。私はそれが非常に高速で信頼できることを発見しました。

#include <strtk.hpp>

double pi = M_PI;
std::string pi_as_string  = strtk::type_to_string<double>( pi );
于 2015-06-08T15:48:50.393 に答える
6

lexical_castの問題は、精度を定義できないことです。通常、doubleを文字列に変換する場合、それは印刷したいためです。精度が高すぎたり低すぎたりすると、出力に影響します。

于 2009-09-22T15:29:59.147 に答える
4

stringstreamを使用することもできます。

于 2008-12-01T20:37:46.280 に答える
4

へー、私はこれを書きました(この質問とは関係ありません):

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

/* rest of the code */
于 2008-12-01T20:41:21.170 に答える
2

SOに関する私の以前の投稿を読むことをお勧めします。(一時的なostringstreamオブジェクトを含むマクロ化されたバージョン。)

記録のために:私自身のコードでは、snprintf()を好みます。ローカルスタックにchar配列があるので、それほど非効率的ではありません。(まあ、配列サイズを超えてループして2回実行した場合は...)

(vsnprintf()でもラップしました。しかし、タイプチェックが必要です。コードが必要な場合はYelp ...)

于 2008-12-02T06:48:50.883 に答える
2

通常、この操作には、ecvt、fcvt、または gcvt 関数を使用する必要があります。

/* gcvt example */
#include <stdio.h>
#include <stdlib.h>

main ()
{
  char buffer [20];
  gcvt (1365.249,6,buffer);
  puts (buffer);
  gcvt (1365.249,3,buffer);
  puts (buffer);
  return 0;
}

Output:
1365.25
1.37e+003   

関数として:

void double_to_char(double f,char * buffer){
  gcvt(f,10,buffer);
}
于 2015-11-21T14:42:15.867 に答える
2

sprintf()と家族を見てください。

于 2008-12-01T20:37:06.343 に答える
1

を使用しto_string()ます。
例 :

#include <iostream>   
#include <string>  

using namespace std;
int main ()
{
    string pi = "pi is " + to_string(3.1415926);
    cout<< "pi = "<< pi << endl;

  return 0;
}

自分で実行してください: http://ideone.com/7ejfaU
これらも利用可能です:

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned 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);
于 2016-02-11T16:55:15.217 に答える
0

よりコンパクトなスタイルを試すことができます:

std::string number_in_string;

double number_in_double;

std::ostringstream output;

number_in_string = (dynamic_cast< std::ostringstream*>(&(output << number_in_double <<

std::endl)))->str(); 
于 2014-04-10T23:36:13.863 に答える