2015-04-05 99 views
0

聲明:我是一名新的C++程序員,但我已經閱讀了很多關於浮點數等的知識,以及某些數字如何無法正確存儲以及所有的。在我的許多Google搜索中,我一直無法找到真正專門針對此問題的任何內容。在C++中從一個double到一個字符串連接時丟失精度

好吧,所以基本上是什麼標題說 - 我有一個問題,當我連接兩個雙變量到一個字符串,他們在每個變量數的末尾下降一個小數。我在做的是讓用戶輸入兩個數字(存儲爲雙打)進行一些計算,但後來在程序中我需要兩個數字在一個字符串中,以便我可以在數組中搜索它們(我已經加載了值)。當這些數字串聯到一個字符串中時,它們會丟掉它們兩個值中的最後一個數字,這會拋出搜索結果(我做了一些調試以發現此問題)。

這裏是我的變量讀什麼後出任右它們是由用戶指定的值:

USER1 = 43.5803481
用戶2 = -116.7406331

到目前爲止這些好值,這裏是它連接後的樣子:

concat = 43.580348 -116.740633

正如你所看到的,我在每個變量的末端丟失了1。

下面是我使用來連接它們的代碼:

concat = to_string(user1) + " " + to_string(user2); 

我已經聲明的變量CONCAT作爲字符串和一切。

所以我想我想知道:
(1)爲什麼這樣做? (見編輯)
(2)我該如何解決? (有沒有更好的方法來做到這一點?等)

在此先感謝您看!

編輯:我現在明白,to_string只有6位小數,但其他網頁上的解決方案似乎沒有解決我的問題。

+0

可能重複的[設置爲std ::精度爲\轉換浮點值時_string](http://stackoverflow.com/questions/16605967/set-precision-of-stdto-string-when-轉換浮點值) – OldProgrammer 2015-04-05 04:28:52

+0

謝謝,我不知道to_string()只有6位小數。現在我只需要弄清楚鏈接中的代碼實際上意味着什麼。 – Oryn 2015-04-05 04:44:05

+0

[std :: to \ _string(double)]的精度可能重複](http://stackoverflow.com/questions/14520309/the-precision-of-stdto-stringdouble) – 2015-04-05 06:25:52

回答

0

我結束了使用下面的代碼,它完成了我所需要的 - 它使用了一個雙變量並將其更改爲一個字符串,同時保持精度。

注意:爲了便於記錄,您需要將#include <sstream>包括到您的預處理器中才能正常工作。

template <class T> 
string num2str(const T& num, unsigned int prec = 8) 
{ 
string ret; 
stringstream ss; 


ios_base::fmtflags ff = ss.flags(); 
ff |= ios_base::dec; 
ff |= ios_base::fixed; 
ff |= ios_base::basefield; 
ss.flags(ff); 
ss.precision(prec); 
ss << num; 
ret = ss.str(); 
return ret; 
}; 
相關問題