【发布时间】:2017-08-06 08:20:22
【问题描述】:
我目前想知道为什么在使用 C++ 时,以下操作 20 / (10.0 / 6) 会导致 12 (double)。 10.0 是双精度数,20 和 6 是整数。 (10.0 / 6) 结果为 1.66,因为 6 首先变成双倍。但是为什么是 20 / 1.66 然后是 12 而不是 12.05?
示例程序:
#include <iostream>
using namespace std;
int main()
{
cout << "20 / (10.0 / 6): " << (20 / (10.0 / 6)) << endl;
return 0;
}
示例会话(gcc、cygwin、Windows 10 - 64 位):
$ echo -e '#include <iostream>
> using namespace std;
> int main()
> {
> cout << "20 / (10.0 / 6): " << (20 / (10.0 / 6)) << endl;
> return 0;
> }
> ' > test-div.cc
$ g++ -o test-div test-div.cc
$ ./test-div.exe
20 / (10.0 / 6): 12
【问题讨论】:
-
你如何检查结果?您是否分配给
int变量? -
(10.0/6)实际上是1.6666666666666667(在大多数系统上)。更高的精度,你可以看到除法的结果实际上是11.99999999999999976,当存储在double中时,它会四舍五入为12.0。 -
请发布示例代码以展示您在此方面的研究。为什么你认为结果是 12?
-
@machinery 我做了一个简单的示例,可以确认 12。(cygwin,gcc)Windows 7 计算器也计算 12。
-
如果我们谈论的是实数,
20/(10/6)大约是20*(6/10),这与(20/10)*6差不多。有时您需要忘记编程。
标签: c++ type-conversion