在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++中有一个处理大整数的双工的巧妙方法吗?< /P> (在Python中尝试过,它将整个精度精细地存储为一个浮点,只是想知道哪里出了问题。)在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 () {
非常感谢任何想法/建议。您可以使用
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