在C+中处理具有大整数部分的双精度运算+; 我需要处理C++中的子坐标,它具有大整数部分(例如515876.12/5117789.22),但我对四舍五入有问题: double inUTMX = 560351.12 is displayed as 560351 double inUTMY = 5113570.22 is displayed as 5.11357e+06

在C+中处理具有大整数部分的双精度运算+; 我需要处理C++中的子坐标,它具有大整数部分(例如515876.12/5117789.22),但我对四舍五入有问题: double inUTMX = 560351.12 is displayed as 560351 double inUTMY = 5113570.22 is displayed as 5.11357e+06,c++,types,double,rounding-error,C++,Types,Double,Rounding Error,如有必要,我可以对坐标进行归一化处理(例如/1e5),但首先我需要通过命令行读取亚米坐标。问题是他们总是被围住 在C++中有一个处理大整数的双工的巧妙方法吗?< /P> (在Python中尝试过,它将整个精度精细地存储为一个浮点,只是想知道哪里出了问题。) 非常感谢任何想法/建议。您可以使用std::setprecision修改doubles的流式传输方式 例如: #include <iostream> #include <iomanip> int main () {

如有必要,我可以对坐标进行归一化处理(例如/1e5),但首先我需要通过命令行读取亚米坐标。问题是他们总是被围住

在C++中有一个处理大整数的双工的巧妙方法吗?< /P> (在Python中尝试过,它将整个精度精细地存储为一个浮点,只是想知道哪里出了问题。)


非常感谢任何想法/建议。

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

例如:

#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;
}

是什么让你认为“double inUTMX=560351.12存储为560351”?数字看起来太小,以至于整数部分超过了double的精度。可能是输出问题。存储为应显示为。Cout会给我舍入值,也会处理分步输出值中的结果,因为我的所有计算都舍入为整数。有许多格式标志可帮助您实现这一点。设置精度、固定等。
560351.11999999999534
5113570.2199999997392