免责声明:我是一名新的C ++程序员,但我已经阅读了很多关于浮点数等的信息,以及如何正确存储某些数字以及所有这些数字。在我的许多Google搜索中,我无法找到任何真正针对此问题的内容。
好的,基本上标题是什么 - 当我将两个双变量连接成一个字符串时,我遇到了问题,它们在每个变量号的末尾都丢了一个小数。我正在做的是让用户输入两个数字(存储为双精度数)进行一些计算,但是稍后在程序中我需要将两个数字放在一个字符串中,这样我就可以在一个数组中搜索它们(我已经加载了值)。当这些数字连接成一个字符串时,它们会丢弃它们的值中的最后一个数字,这会抛出搜索(我做了一些调试以找到这个问题)。
以下是我的变量在用户为其赋值后立即读取的内容:
user1 = 43.5803481
user2 = -116.7406331
到目前为止,这些值非常好,这是我连接它们后的样子:
concat = 43.580348 -116.740633
正如您所看到的,我在每个变量的末尾都丢失了1。
这是我用来连接它们的代码:
concat = to_string(user1) + " " + to_string(user2);
我已经将变量concat声明为字符串和所有内容。
所以我想我想知道:
(1)为什么要这样做?(见编辑)
(2)我该如何解决? (有更好的方法吗?等等。)
提前感谢您查看此内容!
编辑:我现在明白to_string
只有六个小数位,但其他已链接的网页上的解决方案似乎无法解决我的问题。
答案 0 :(得分: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;
};