为什么我在这里得到 0 而不是 0.5?
Why am I getting 0 instead of 0.5 here?
可能的重复:
C++中的除法无法按预期工作
事实证明,我的程序返回了错误的结果,所以我决定将代码分解成小块。设置断点后,原来...
double test3 = ((2 - 1) / 2);
。根据编译器等于 0 C++。我不知道为什么。有人可以向我解释一下吗?
我正在使用 MS Visual Studio Premium 2012
因为你在做整数除法。1/2
0
,然后转换为double
,得到0.
。如果要进行浮点除法,请尝试将除法的参数之一设为浮点数:
double test3 = (2.0-1)/2;
因为你在右手边使用的数字都是整数:(即:表达式(2-1)/2
的计算结果为0
,因为(int)1/(int)2
计算结果为0
因为整个事情都是整数。
将其更改为:
double test3 = ((2 - 1) / 2.0);
然后表达式被(int)1/(double)2
,它将计算为双精度,从而0.5
当表达式中仅涉及整数时,您只会获得整数算术。如果你想有浮点运算,你需要在某个点涉及浮点表达式,例如
double test3 = ((2 - 1) / 2.0);
尝试将数字加倍,(2.-1.)/阿拉伯数字。;
相关文章:
- 为什么thread_local变量在这里从未初始化?
- 为什么我必须在这里使用dynamic_cast
- 为什么 C++20 中的 [[可能]] 属性在这里引发警告?
- 为什么在这里使用 int64_t 错误和 int 可以编译?
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 为什么在这里再次宣布宣布的课程?
- 为什么在这里可以使用"删除"?
- 使用大括号实例化 - 它是什么,为什么在这里使用它?
- 为什么在这里调用析构函数,以及在调用该对象析构函数后如何调用对象成员函数?
- 为什么在这里调用析构函数两次
- 为什么在这里添加一个临时变量会使这个编译器错误消失?类型相同
- 为什么在这里使用虚空**?
- 为什么在这里称为复制构造函数
- 为什么在这里对c++输入文件流进行两次检查
- 为什么在这里调用复制构造函数而不是普通的构造函数和重载赋值运算符
- C++11:为什么在这里调用复制ctor
- 为什么在这里返回一个 malloc'd 指针会导致免费"HEAP CORRUPTION"?
- 为什么在这里调用转换构造函数
- 为什么在这里调用复制构造函数
- 为什么在这里使用static_cast而不是dynamic_cast