我正在失去十进制GPS坐标的精度

时间:2014-07-08 18:56:20

标签: c++ variables gps decimal

在C ++程序中存储GPS坐标的最佳变量类型是什么?我编写下面的代码只是为了试一试,无论我选择哪种变量类型,问题仍然存在。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;

class Coordinate {
    public:
            float xcoor, ycoor;
            int radius;
            void set_values (float, float, int);

};

void Coordinate::set_values (float x, float y, int r){
    xcoor = x;
    ycoor = y;
    radius = r;
}

int main (){
    Coordinate test;
    test.set_values (32.682633, -117.181554, 50);
    cout << "coordinates: (" << test.xcoor << "," << test.ycoor << ")\n";
    return 0;
}

此代码输出值:  (32.6826,-117.182)

显然,我正在失去巨大的精确度,但无论如何我能保持它吗?我以前没有做GPS坐标,也找不到有类似问题的人。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

在算术中使用浮点变量会导致精度损失,但据我所知,您不会使用坐标进行任何计算。

我怀疑你假设std::cout输出具有完全精度的浮点变量,默认情况下不是这样。

double test = 1.23456789;
std::cout.precision(10);
std::cout << "test: " << test << std::endl; // prints "test: 1.23456789"

有关详细信息,请参阅that question以及documentation of ostreams

答案 1 :(得分:0)

据我所知,它只打印6位数字。尝试setwsetprecision。使用前者,您可以设置常量来打印数字或字符(这在对齐方面很方便),后者设置程序打印的位数。

对于花车,你不应该丢失这些数字中的任何数据。