2016-04-22 151 views
0

我正在使用C++ 11。我在文本文件中有现实世界坐标,如38.0098662, 23.7805398,意思是2 double变量。我使用C++解析该文件,并使用stod()方法将strings转换为double。当我尝试使用count.precision(9);打印值时,这些值似乎与文本文件中的值相同。将字符串转换为double,然后再将double转换为字符串而不丢失精度

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

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

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

+0

_“我在python中做了完全相同的事情,而且我没有看到这种行为。”_不确定Python的相关性在这里。这完全是一种不同的语言。 –

回答

1

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

这里是一个老问题,参考其中显示了实现:

Look at this!

希望这有助于!

-3

它来自编译器代码优化(用于最快运行)。有时C++编译器会优化浮点数处理,并会失去一点精度。

+4

这与优化无关。无论如何,编译器应该如何“优化”在运行时从文件读取的值? –

+0

https://msdn.microsoft.com/zh-cn/library/aa289157(v=vs.71).aspx –

+0

gcc对浮点模型也有其优化。 此优化适用于在变量中赋值。 –

相关问题