C++中的除法没有按预期工作

Division in C++ not working as expected

本文关键字:工作 除法 C++      更新时间:2023-10-16

我在做其他事情,但结果都是零,所以我做了这个极简主义的例子,结果仍然是0。

#include <iostream>
int main(int argc, char** argv)
{
  double f=3/5;
  std::cout << f;
  return 0;
}

我错过了什么?

您忽略了3和5是整数这一事实,因此您得到的是整数除法。要使编译器执行浮点除法,请使其中一个为实数:

 double f = 3.0 / 5;

它不需要是.0,你也可以做3./53/5.3e+0 / 53 / 5e-00xCp-2 / 5或。。。只需要涉及一个指示符,编译器就知道它应该作为浮点执行除法。

另一种可能性:double f=double(3)/5。这需要更多的打字,但它无疑会让你在做什么。

或者简单地使用double f=.6,这也可以。。。

试试这个:

double f = 3.0/5.0;

这应该可以解决您的问题

尝试在其中一个除数后放置.0。这将把它们转换为浮点文字。

您使用的是整数。你可以做很多事情来使常数翻倍,比如左旋右绕的out状态,但这不是好的。它很难阅读,而且令人困惑。如果你想要3和5,就把它们做成3.0和5.0。如果每个人都被迫阅读你的代码,他们就会知道你的意思。他/她所说的很多内容实际上都需要你了解C/C++,以及浮点是如何存储的。

在这种情况下,您将泛型变量保存为int,并希望获得double:的比率

using namespace std;
int main()
{
   int x = 7;
   int y = 4;
   double ratio;
   ratio = static_cast<double>(x)/static_cast<double>(y);
   cout << "ratio =t"<<ratio<< endl;
}