在 C++ 中处理具有大整数部分的双精度数

Handling doubles with large integer parts in C++

我需要在 C++ 中处理具有大整数部分的亚米坐标(例如 515876.12 // 5117789.22),但我遇到了舍入问题:

double inUTMX = 560351.12 is displayed as 560351
double inUTMY = 5113570.22 is displayed as 5.11357e+06

如有必要,我可以标准化处理坐标(例如/1e5),但我需要首先通过命令行读入亚米坐标。问题是他们总是四舍五入。

在 C++ 中是否有处理具有大整数值的双精度的巧妙方法?

(在 Python 中尝试过,它将整个精度精细存储为浮点数,只是想知道我哪里出错了。)

非常感谢任何想法/指点。

您可以使用 std::setprecision 修改 double 的流式传输方式。

示例:

#include <iostream>
#include <iomanip>

int main () {
   double inUTMX = 560351.12;
   double inUTMY = 5113570.22;

   std::cout << std::setprecision(20) << inUTMX << std::endl;
   std::cout << std::setprecision(20) << inUTMY << std::endl;

  return 0;
}

输出:

560351.11999999999534
5113570.2199999997392