C++ 将字符串转换为双精度,然后再将双精度转换为字符串,而不丢失精度

C++ 将字符串转换为双精度,然后再将双精度转换为字符串,而不丢失精度,c++,string,c++11,C++,String,C++11,我正在使用C++11。我在文本文件中有真实世界的坐标,如38.0098662、23.7805398,这意味着两个double变量。我用C++解析文件,然后用 STODE()/方法将字符串转换成双< /代码>。当我尝试用count.precision(9)打印值时,值似乎与文本文件中的值相同 然后,我想将那些double值转换回string格式。为此,我使用to_string()方法。然而,这似乎稍微改变了值。例如: 38.0098662, 23.7805398 became 38.009866

我正在使用C++11。我在文本文件中有真实世界的坐标,如
38.0098662、23.7805398
,这意味着两个
double
变量。我用C++解析文件,然后用<代码> STODE()/<代码>方法将<代码>字符串转换成<代码>双< /代码>。当我尝试用
count.precision(9)打印值时,值似乎与文本文件中的值相同

然后,我想将那些
double
值转换回
string
格式。为此,我使用
to_string()
方法。然而,这似乎稍微改变了值。例如:

38.0098662, 23.7805398  became
38.009866,  23.780540
// in fact, every number is xx.yyyyyy

我不明白为什么用C++11这么难做到这一点。为什么我会无缘无故地失去精度?我怎样才能正确地做到这一点?我研究的每个问题都指向
to_string()
方法,这就是我正在使用的方法

有人和你有同样的问题。 只需将std::ostringstream的精度设置为所需的大小,并将其作为std::string返回即可

下面是一个老问题的参考,该问题显示了实现:


希望这有帮助

这是因为编译器代码优化(为了最快的运行)。
有时C++编译器优化浮点数处理,并丢失一点精度。

“我在Python中做了完全相同的事情,我没有看到这种行为。”这是一种完全不同的语言。这与优化无关。无论如何,编译器应该如何在运行时“优化”从文件中读取的值?gcc也对浮点模型进行了优化。这种优化在变量赋值时适用。很抱歉,您感到困惑。您发布的文章还说明了一些其他内容。一个优化的C++编译器[…]以这样的方式安排机器指令以提高效率和/或减小大小。编译器可能无法优化编译时不属于程序一部分的值。