C++中的除法没有按预期工作
Division in C++ not working as expected
我在做其他事情,但结果都是零,所以我做了这个极简主义的例子,结果仍然是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./5
或3/5.
或3e+0 / 5
或3 / 5e-0
或0xCp-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;
}
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- 按位移和减法进行C++除法将无法正常工作
- 除法停止对负数工作
- C++中的整数除法无法按预期工作
- C++中的除法没有按预期工作