【发布时间】:2015-05-01 22:11:02
【问题描述】:
我制作了一个函数,可以将纬度和经度的格式从 Degrees Minutes.m 转换为 Decimal Degrees。
例如:
latitude = 3130.1245 (Degrees Minutes.m) == 31.502075 (Decimal Degrees)
问题是我用相同的参数调用了这个函数两次,但它返回了两个不同的结果。这是怎么回事?
这是我的代码:
double Format(char *array){
double Degrees = 10*(array[0]-'0')+(array[1]-'0');
int i;
double z=0,N=10;
double x =0;
for(i=2;array[i]!='\0';i++){
if(array[i]=='.'){
for(i=i+1;array[i]!='\0';i++){
z=z+((array[i]-'0')/N);
N=N*10;
}
}
else
x=x*10+(array[i]-'0');
}
double Minutes = (x+z)/60 ;
return Degrees+Minutes ;
}
int main(){
char lat[]="3031.1234";
char lon[]="3031.1234";
double latitude ;
double longitude ;
latitude = Format(lat);
longitude = Format(lon);
printf("%lf\n",latitude); // output : 30.518723
printf("%lf\n",longitude); // output : 5247.185390
return 0 ;
}
【问题讨论】:
-
我无法使用以下代码重现您的错误
-
我测试了你的代码,它运行良好。
-
你不需要
%lf来打印double,你只需要%f。 -
终于转载了——需要在inner loop后面加上
break; -
您将如何处理 3 位数的度数(经度在 -180..-100 和 +100..+180 范围内)?