【问题标题】:int and double operations in C++C++ 中的 int 和 double 运算
【发布时间】:2014-02-11 09:14:23
【问题描述】:

我正在尝试将纬度和经度位置从度、分、秒转换为十进制度数。但是,当我尝试在 C++ 中执行此操作时,它会将数字四舍五入并且不给出十进制形式。我认为这是因为 double 和 int 混合操作,但我似乎找不到问题所在。我在下面包含了我的代码。任何帮助将不胜感激。

#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?
  • 1./601/60. 或更明确地说是1.0/60.0
  • 为什么你还有一个sixtieth 变量?除以 60 不是更容易吗?

标签: c++ int double


【解决方案1】:

1/60 是整数除法,向零舍入。这意味着您的sixtieth 变量是0。您可能也在其他地方进行整数除法。如果您希望您的除法是浮点数,请确保至少有一个参数是浮点数。

【讨论】:

    【解决方案2】:

    我没有仔细看所有代码,但这是错误的:

    const double sixtieth = (1/60);
    

    1/60 始终是0。这不是混合运算,它只是整数。你应该写:

    const double sixtieth = (1.0/60);
    

    【讨论】:

      【解决方案3】:

      也能胜任:

      const double sixtieth = (double)1/60;
      

      或在 C++ 中首选

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

      const double sixtieth = 1.0/60; 在这里是首选,因为您正在使用右值。

      如果是左值,则需要 double 或 static_cast:

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

      【讨论】:

        猜你喜欢
        • 2013-07-30
        • 2018-01-11
        • 1970-01-01
        • 1970-01-01
        • 2020-02-19
        • 2019-01-31
        • 2014-01-25
        • 1970-01-01
        相关资源
        最近更新 更多