【问题标题】:Handling doubles with large integer parts in C++在 C++ 中处理具有大整数部分的双精度数
【发布时间】:2015-06-24 21:25:54
【问题描述】:

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

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

【问题讨论】:

  • 是什么让你认为“double inUTMX = 560351.12 存储为 560351”?
  • 数字看起来很小,整数部分超过了双精度。可能是输出问题。
  • 存储为应该是显示为
  • Cout 为我提供了舍入值,也处理了步进输出值的结果,因为我所有的计算都舍入为整数。
  • 有很多格式化标志可以帮助你。 setprecision、fixed 等等。

标签: c++ types double rounding-error


【解决方案1】:

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

例子:

#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

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2020-03-10
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多