将字符串转换为双精度,然后将双精度转换为字符串,而不会损失精度
Convert string to double and then double to string without losing precision
我正在使用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++编译器会优化浮点数处理,并丢失一点精度。
相关文章:
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 在 c++ 中从双精度转换为字符串
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- C++,遇到将双精度转换为整数的问题
- 在C++中将双精度转换为intptr_t
- 将大双精度转换为科学记数法以用作字符串?
- 了解双精度转换与整数转换中的整数与截断关系
- 将 OLE 自动化日期 (OADate) 双精度转换为结构 tm,而不使用 VariantTime到SystemTime
- 无法在赋值中将"双精度 (*)[4]"转换为"双精度**"
- 将大双精度转换为无符号 int 期间堆栈损坏
- 将双精度转换为本地8位
- 警告从"双精度"转换为"int"
- 如何将双精度转换为浮点指针
- 将双精度转换为整数时出错
- 使用并集将双精度转换为十六进制再转换为双精度
- 是否有可以将每个双精度转换为唯一uint64_t,保持精度和顺序的功能?(为什么我找不到?
- 使用定点表示法将双精度转换为字符串,没有尾随零和机智的冲刺
- 在C++中将双精度转换为字符*/字符串
- 无法将双精度 [] [] 转换为双精度 **