C ++类型转换问题

时间:2013-06-29 13:04:47

标签: c++

请考虑以下代码:

#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);”给出期望值;

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的类型为doubleaaa内的通话调用

ostream& operator<< (double val);

而外面的人打电话

ostream& operator<< (int val);

你会收到警告(如果你打开它们 - 我建议你这样做),不推荐从doubleint进行隐式演员。