将字符串转换为双精度,然后将双精度转换为字符串,而不会损失精度

Convert string to double and then double to string without losing precision

本文关键字:双精度 转换 字符串 损失 精度 然后      更新时间:2023-10-16

我正在使用C++11。我在文本文件中有现实世界的坐标,例如38.0098662, 23.7805398,这意味着 2 个double变量。我用C++解析该文件,并使用stod()方法将strings转换为double。当我尝试用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++编译器会优化浮点数处理,并丢失一点精度。