我写了两个函数来从其组件Degrees,Minutes和Seconds来回转换纬度和经度。就decToDMS()的方法而言,数学似乎没关系,只是我的正/负迹象在我的分钟和秒上都没有。
对于DMStoDec,我在计算中几乎没有关闭,我不太清楚错误在哪里。以下是两个代码示例:
int DMStoDec(double *deg, int degrees, int minutes, double seconds) {
//test for invalid inputs
if (deg == NULL) {
return 1;
}
if (*deg < -180 || *deg > 180) {
return 1;
}
// Formula is degrees = degrees + minutes/60 + seconds/3600;
double m;
double s;
double d;
d = (double) degrees;
m = (double) minutes / 60;
s = (double) seconds / 3600;
*deg = d + m + s;
printf("DMS to Dec is %lf\n", *deg);
return 0;
}
int decToDMSint *degrees, int *minutes, double *seconds, double deg) {
if (degrees == NULL || minutes == NULL || seconds == NULL) {
return 1;
}
if (deg < -180 || deg > 180) {
return 1;
}
*degrees = deg;
deg = deg - trunc(deg);
// multiply the decimal by 60;
deg *= 60;
*minutes = deg;
// Drop the integer
deg = deg - trunc(deg);
deg *= 60;
*seconds = deg;
return 0;
}
答案 0 :(得分:1)
怎么样:
*degrees = deg;
deg = deg - trunc(deg);
// minutes and seconds are >= 0
if (deg < 0)
deg *= -1;
// multiply the decimal by 60
deg *= 60;
*minutes = deg;
// Drop the integer
deg = deg - trunc(deg);
deg *= 60;
*seconds = deg;