一个简单的问题当我对两个int类型做除法(/)时,想输出一个相对精确的浮点数float类型的数据,于是一开始我用了这样的算法
int a=10;
int b=15;
float c=float(a/b);
cout<<c;
程序可以正常编译,但是结果却是0!
于是仔细看了看书,发现C++在进行运算时是这样工作的:
- 对于两个同类型的,如float与float做除法运算。计算结果是float格式的
- 对于两个不同类型的,如int与float做除法运算。C++会把其中位数比较低的数据拉高。让int数据变成float数据再做运算。
这样就可以解释为什么上述代码不能输出float类型的数据:因为a/b是两个int类型,所以他们做除法后也是int类型(也就代表结果是0)。这时我再给0改变数据类型为float是没有意义的!
思考之后把代码改成了如下形式:
int a=10;
int b=15;
float c=float(a)/b;
cout<<c;
这样我就把a的数据类型强行改成了float,于是在做除法时,b的数据类型也被拉高,就可以得到期待的结果了。
书中也提出了其他的方法,不过我觉得这种方法很实用,有兴趣可以看《C++Primer Plus》第六版的62页。