[英]Sign calculation in c++
我正在嘗試將緯度和經度從度,分,秒轉換為十進制度數。 我已經正確轉換了數字,但是在轉換符號時遇到了麻煩。 當我輸入數字39 57 21表示緯度,輸入-75 11 14表示經度時,它可以正確轉換為(39.9558,75.1872),但是我的符號計算公式無法正常工作。 我已經用細齒梳檢查了代碼,但似乎無法在公式中找到錯誤。 我找到它的公式是:sign =(2x)/(abs(x)+1)。 我在下面包含了我的代碼。 任何幫助將不勝感激。
#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;
}
首先,嘗試使用更好的函數來計算符號,例如:
double sign(double x) {return (x < 0) ? -1 : 1;}
其次,由於只有變量user_degrees_latitude
和user_degrees_longitude
將變為負數,因此,只有在具有幅度時,才應使用變量來最后計算符號。
sign_latitude = sign(user_degrees_latitude);
sign_longitude = sign(user_degrees_longitude);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.