两个int数据的运算输出float类型的问题

一个简单的问题当我对两个int类型做除法(/)时,想输出一个相对精确的浮点数float类型的数据,于是一开始我用了这样的算法

int a=10;
int b=15;
float c=float(a/b);
cout<<c;

程序可以正常编译,但是结果却是0!
于是仔细看了看书,发现C++在进行运算时是这样工作的:

  1. 对于两个同类型的,如float与float做除法运算。计算结果是float格式的
  2. 对于两个不同类型的,如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页。

### C++ 中整数 (int) 运算得到浮点数 (float) 的原因 在编程语言中,特别是像C++这样的强类型静态语言,数据类型的自动转换遵循特定规则。当执行涉及不同类型的操作数的运算时,编译器会根据预定义的行为来决定如何处理这些操作数。 #### 类型提升机制 对于两个相同类型的数值进行除法运算时,比如 `int` 和 `int`,其结果也将保持相同的类型——即仍然是 `int`。然而,如果希望获得更精确的小数部分,则需要至少一方为更高精度的数据类型,如 `float` 或者 `double`。这是因为较低级别的整形会在必要时被隐式地转换成高级别的实数形式以完成相应的数学计算[^1]。 考虑下面的例子: ```cpp #include <iostream> using namespace std; int main(){ int a = 10; int b = 15; // 将其中一个变量强制转换为 float 来触发类型升级 float c = static_cast<float>(a) / b; cout << "c=" << c << endl; } ``` 在这个例子中,通过显式的类型转换 (`static_cast`) 把 `a` 提升到了 `float` 类型,从而使得整个表达式的求值都按照浮点数来进行,最终得到了预期中的非零小数值作为输出。 #### 自动类型转换原则 当涉及到不同种类的数据参与同一个表达式的时候,C++ 有一套完整的优先级体系用于确定哪个参数应该调整自己的类别以便匹配另一个参数的要求。具体来说,在遇到 `int` 和 `float` 同时存在的场景下,前者会被临时视作后者的形式参与到后续的逻辑当中去[^2]。 因此,要使整数之间的四则运算能够返回带有小数点后的答案而不是简单的截断取整,就需要确保至少有一个输入是以浮点数的身份加入进来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值