在 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
我需要在 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