尽管存储为双精度数,但为什么除法 (3/5) 结果为零?

问题描述 投票:0回答:6

我正在做其他事情,但所有结果都是零,所以我做了这个简约的例子,输出仍然是 0。

#include <iostream>

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

我错过了什么?

c++ floating-point division integer-division
6个回答
58
投票

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

 double f = 3.0 / 5;

17
投票

它不需要.0

,你也可以做
3./5
3/5.
3e+0 / 5
3 / 5e-0
0xCp-2 / 5
或...只需要涉及一个指标,所以编译器知道它应该以浮点形式执行除法。

另一种可能性:

double f=double(3)/5

。打字量要大得多,但毫无疑问你在做什么。

或者简单地使用

double f=.6

,这也能达到目的...


9
投票
试试这个:

double f = 3.0/5.0;

这应该可以解决你的问题


5
投票
尝试在其中一个除数后面加上

.0

。这会将它们转换为浮点文字。


3
投票
如果您使用

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

2
投票
您正在使用整数。您可以通过很多方法使常量加倍,例如 leftaroundabout 状态,但这并不是很好。它很难阅读并且令人困惑。如果您想要 3 和 5,请将它们设置为 3.0 和 5.0。如果他们被迫阅读你的代码,每个人都会明白你的意思。他/她所说的大部分内容确实需要您了解 C/C++ 以及如何存储浮点数来得出正面或反面。

© www.soinside.com 2019 - 2024. All rights reserved.