2015-04-05 101 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; 
}; 
相关问题