2011-07-18 2 views
0

に私は私のC++コードでこのクエリがあります。精密C++

query << "UPDATE currency SET value= " << currencyValue 

currencyValueは「const double& currencyValue」と定義されており、私が見たときに値が

0.00045545105422339915 

である。しかしを、私はの値をチェックするとクエリは、私はこの

UPDATE currency SET value = 0.000455451 

ような何かを得るように小数が欠けます...

なぜでしょうか?

+4

クエリとはどのようなタイプですか? std :: stringstream? – carlpett

+0

これは[SQLインジェクションの脆弱性](http://en.wikipedia.org/wiki/SQL_injection)を得るための恐ろしい方法のようです(おそらく 'currencyValue'が数値型のときではありませんが、 SQLクエリ文字列をこのように作成する他のインスタンスもあります)。 –

+0

クエリのtypwはストリームを返す –

答えて

5

double値を出力する前に、setprecision(10)(または実際には任意の値)をストリームに呼び出すことができます。

あなたはこのようにそれを行うことができます。

#include <iomanip> 
query << "UPDATE currency SET value= " << std::setprecision(10) << currencyValue; 
+0

申し訳ありません、どうすればいいですか?私はC++を初めて使っています –

+0

それはうまくいった!ありがとうございました! –

+0

@Dave。あなたはそれを動かすことができますが、C++を初めて使ったので、ここでは手がかりを探すための良いページです[http://www.cplusplus.com/reference/iostream/manipulators/setprecision/]。 – jetimms

0

currencyValueは、二重、ある "UPDATE通貨SET値=" 文字列です。ダブルからストリングへの変換で精度が失われます。 "std :: setprecision(20)"のようなものを使うか、別の関数を使ってdoubleを文字列に変換することができます。