【问题标题】:c++ why does ((1 / 2) * 2) return 0 [duplicate]c ++为什么((1 / 2)* 2)返回0 [重复]
【发布时间】:2015-07-23 03:48:09
【问题描述】:

我第一次在这里发帖,但我必须知道这种简单的代码和平有什么问题:

#include <iostream>

using namespace std;

int main()
{
    double test = (1 / 2) * 2;
    cout << test << endl;
    return 0;
}

当我运行此代码时,它显示为 0,我是否应该强制转换某些内容,无论我使用什么编译器都会发生这种情况,如果将“1”除以某种形式的十进制,它会返回更奇怪的结果。

【问题讨论】:

  • 因为 1 和 2 是 ints。默认情况下,所有数字都是ints。
  • 在 OP 的辩护中,这真的很难搜索。

标签: c++


【解决方案1】:

因为在整数数学1 / 2 == 00 * 2 == 0

改用1.02.0

【讨论】:

    【解决方案2】:

    (1 / 2) 中,1 和 2 都是整数,这意味着结果也是整数。这意味着表达式返回00 * 20

    要获得您想要的结果,请尝试(1.0 / 2.0)

    【讨论】:

    • 只有一侧.0就够了。
    【解决方案3】:

    如果你想得到正确的结果,你需要写:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      double test = ((double)1 / 2) * 2;
      cout << test << endl;
      return 0;
    }
    

    【讨论】:

    • 需要解释。此外,只投射一侧就足够了,另一侧将被隐式投射。
    • 另外,不要使用 C 风格的强制转换。
    【解决方案4】:

    您使用的是int 而不是double

    正在修复...

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        double test = (1.0 / 2.0) * 2.0;
        cout << test << endl;
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2013-02-01
      相关资源
      最近更新 更多