我正在使用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()
方法,这就是我正在使用的方法。
答案 0 :(得分:1)
有人遇到了和你一样的问题。 只需将std :: ostringstream的精度设置为所需的大小,并将其作为std :: string返回。
以下是对显示实施的旧问题的引用:
希望这有帮助!
答案 1 :(得分:-3)
它源于编译器代码优化(最快运行)。 有时C ++编译器会优化浮点数处理,并且会失去一点精度。