[英]Losing precision when concatenating from a double to a string in C++
免責聲明:我是一名新的C ++程序員,但是我已經讀了很多有關浮點數之類的東西,以及一些數字如何不能正確存儲的知識。 在許多Google搜索中,我都找不到真正專門針對此問題的內容。
好的,基本上是標題所說的-當我將兩個雙精度變量連接到一個字符串中時,我遇到了一個問題,它們在每個變量號的末尾都放了一個小數。 我正在做的是讓用戶輸入兩個數字(以雙精度形式存儲)以進行一些計算,但是稍后在程序中,我需要將兩個數字都放在字符串中,以便可以在數組中搜索它們(已將值加載到)。 當這些數字連接成一個字符串時,它們會在兩個值中都刪除最后一位數字,這會引發搜索失敗(我進行了一些調試才能發現此問題)。
這是用戶為變量賦值后立即讀取的內容:
用戶1 = 43.5803481
user2 = -116.7406331
到目前為止,這些值都很好,這是我將它們連接起來后的樣子:
concat = 43.580348 -116.740633
如您所見,我在每個變量的末尾都失去了1。
這是我用來連接它們的代碼:
concat = to_string(user1) + " " + to_string(user2);
我已經將變量concat聲明為字符串和其他所有內容。
所以我想我想知道:
(1)為什么這樣做?
(請參見編輯)
(2)如何解決? (是否有更好的方法?等)
在此先感謝您的關注!
編輯:我現在知道to_string
只包含六個小數位,但是其他頁面上已鏈接的解決方案似乎無法解決我的問題。
我最終使用了下面的代碼,它完全滿足了我的需要-使用了一個double變量並將其更改為字符串,同時保持了精度。
注意:出於文檔目的,您需要在預處理器中包含#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;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.