请考虑以下代码:
#include <iostream>
using namespace std;
int aaa(int a) {
cout << a * 0.3 << endl;
return a * 0.3;
}
int main()
{
cout << aaa(35000);
}
打印出来:
10500
10499
为什么输出不同?
我有一个解决方法,使用“return a * 3/10;”但我不喜欢它。
编辑:
发现做“返回浮动(a * 0.3);”给出期望值;
答案 0 :(得分:8)
0.3 * 35000的结果是一个浮点数,略小于10500.打印时它被舍入到10500,但是当被强制转换为int时,小数位被丢弃,结果为10499。
答案 1 :(得分:6)
int * double
表达式产生双倍,这就是打印的第一件事。
然后你转换为int
砍掉剩下的部分(即使它几乎就在那里,坐在10500-DBL_EPSILON),并将其传回去。第二个打印出那个值。
float-int转换应该小心,最好不要。
答案 2 :(得分:2)
a * 0.3
的类型为double
。 aaa
内的通话调用
ostream& operator<< (double val);
而外面的人打电话
ostream& operator<< (int val);
你会收到警告(如果你打开它们 - 我建议你这样做),不推荐从double
到int
进行隐式演员。