将字符串转换为double,然后将其转换为字符串而不会丢失精度

时间:2016-04-22 14:27:17

标签: c++ string c++11

我正在使用C ++ 11。我在文本文件中有38.0098662, 23.7805398等真实世界坐标,意思是2 double个变量。我用C ++解析该文件,然后使用strings方法将double转换为stod()。当我尝试使用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()方法,这就是我正在使用的方法。

2 个答案:

答案 0 :(得分:1)

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

以下是对显示实施的旧问题的引用:

Look at this!

希望这有帮助!

答案 1 :(得分:-3)

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