2014-01-21 83 views
1

我想将纬度和经度从度,分,秒转换为十进制度数。我已经正确地转换了数字,但我遇到了转换符号的麻烦。当我输入经纬度的数字39 57 21和经度的-75 11 14时,它会正确转换为(39.9558,75.1872),但我的符号计算公式无法正常工作。我用细齿梳检查了代码,但似乎无法在我的公式中找到错误。我给出的公式是:sign =(2x)/(abs(x)+1)。我在下面列出了我的代码。任何帮助将不胜感激。C++中的符号计算

#include <iomanip> 
#include <cmath> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    int user_degrees_latitude, user_minutes_latitude, user_seconds_latitude, 
     user_degrees_longitude, user_minutes_longitude, user_seconds_longitude, 
     sign_latitude, sign_longitude; 
    double total_minutes_latitude, total_degrees_latitude, 
     total_minutes_longitude, total_degrees_longitude, final_latitude, 
     final_longitude; 
    const double sixtieth = (1./60); 

    cout << "Input latitude in degrees, minutes, seconds:"; 
    cin >> user_degrees_latitude >> user_minutes_latitude >> 
     user_seconds_latitude; 

    cout << "Input longitude in degrees, minutes, seconds:"; 
    cin >> user_degrees_longitude >> user_minutes_longitude >> 
     user_seconds_longitude; 

    total_minutes_latitude = 
     (user_minutes_latitude + ((sixtieth) * user_seconds_latitude)); 
    total_degrees_latitude = 
     (abs(user_degrees_latitude) + ((sixtieth) * total_minutes_latitude)); 

    total_minutes_longitude = 
     (user_minutes_longitude + ((sixtieth) * user_seconds_longitude)); 
    total_degrees_longitude = 
     (abs(user_degrees_longitude) + ((sixtieth) * total_minutes_longitude)); 

    sign_latitude = 
     (2 * (total_degrees_latitude))/((abs(total_degrees_latitude)) + 1); 
    sign_longitude = 
     (2 * (total_degrees_longitude))/((abs(total_degrees_longitude)) + 1); 

    final_latitude = (sign_latitude * total_degrees_latitude); 
    final_longitude = (sign_longitude * total_degrees_longitude); 

    cout << user_degrees_latitude << " deg " << user_minutes_latitude << "\' " 
     << user_seconds_latitude << "\" latitude, " << user_degrees_longitude 
     << " deg " << user_minutes_longitude << "\' " << user_seconds_longitude 
     << "\""; 
    cout << " is (" << total_degrees_latitude << "," << total_degrees_longitude 
     << ")" << endl; 

    return 0; 
} 
+3

一个简短的测试案例,而不是所有的代码将是很好的。 – Borgleader

+0

那么,也许你的公式错了? – OldProgrammer

+0

这与您之前发布的代码基本相同。你会发现使用你的调试器可以帮助你,而不是要求你为你调试它。 –

回答

0

首先,尝试更好的功能,用于计算符号,如:

double sign(double x) {return (x < 0) ? -1 : 1;} 

其次,因为只有变量user_degrees_latitudeuser_degrees_longitude是以往任何时候都为负,你应该只使用那些一旦你有了大小,就在最后计算符号。

sign_latitude = sign(user_degrees_latitude); 
sign_longitude = sign(user_degrees_longitude);