简体   繁体   English

C ++中的int和double操作

[英]int and double operations in C++

I am trying to convert latitude and longitude locations from degrees, minutes, seconds to a decimal degree number. 我正在尝试将纬度和经度位置从度,分,秒转换为十进制度数。 However, when I try to do this in C++ it rounds the numbers off and doesn't give the decimal form. 但是,当我尝试在C ++中执行此操作时,会将数字四舍五入,并且不给出十进制形式。 I think this is because of the double and int mixed operations but I can't seem to find the problem. 我认为这是由于double和int混合运算引起的,但我似乎找不到问题。 I have included my code below. 我在下面包含了我的代码。 Any help would be greatly appreciated. 任何帮助将不胜感激。

#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;
double total_minutes_latitude, total_degrees_latitude, total_minutes_longitude, total_degrees_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));

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;
}

1/60 is integer division, which rounds toward zero. 1/60是整数除法,四舍五入为零。 That means your sixtieth variable is 0 . 这意味着您的sixtieth变量是0 You may be doing integer division in other places, too. 您可能也在其他地方进行整数除法。 If you want your division to be floating-point, make sure at least one argument is floating-point. 如果希望除法是浮点数,请确保至少有一个参数是浮点数。

I haven't looked through all the code, but this is wrong: 我没有仔细阅读所有代码,但这是错误的:

const double sixtieth = (1/60);

1/60 is 0 , always. 1/60始终为0 This is not a mixed operation, it is integer only. 这不是混合操作,仅是整数。 You should write: 您应该写:

const double sixtieth = (1.0/60);

Could also do the job: 也可以做这项工作:

const double sixtieth = (double)1/60;

Or preferred in C++ 或首选C ++

const double sixtieth = static_cast<double>(1)/60;

const double sixtieth = 1.0/60; Is preferred here though as your are working with rvalues. 尽管在使用右值时,这里还是首选。

You would need double or static_cast in case of lvalues: 如果是左值,则需要double或static_cast:

int numerator = 1;
int denominator = 60;


const double sixtieth = (double) numerator/denominator;
const double sixtieth = static_cast<double>(numerator)/denominator;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM