2011-07-18 25 views
0

我有這個疑問在我的C++代碼:精密在C++

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

currencyValue被定義爲「const double& currencyValue」當我看值

0.00045545105422339915 

但是如果我檢查的價值該查詢然後我得到這樣的事情

UPDATE currency SET value = 0.000455451 

so decimals get missing ...

任何想法爲什麼?

+4

什麼類型是查詢?一個std :: stringstream? – carlpett

+0

這看起來像一個強大的方式來獲得[SQL注入漏洞](http://en.wikipedia.org/wiki/SQL_injection)(可能不是'當currencyValue'是一個數字類型,但如果你有這個,那麼你這種方式可能也有創建SQL查詢字符串的其他實例)。 –

+0

查詢的類型是wostringstream –

回答

5

在向您的數據流輸出雙精度值之前,您可以嘗試致電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貨幣設定值=」 是字符串。從雙精度轉換爲字符串時精度丟失。 你可以使用像「std :: setprecision(20)」或使用不同的函數來將double轉換爲字符串。