在C ++中使用大整数部分处理双精度数

时间:2015-04-17 20:54:39

标签: c++ types double rounding-error

我需要处理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中尝试过,它将整个精度存储为浮点数,只是想知道我哪里出错了。)

任何想法/指针都非常感激。

1 个答案:

答案 0 :(得分:0)

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

示例:

#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