为何C++自定义函数计算结果与直接计算结果不一致?
问题分析与解决
这问题我之前帮朋友排查过,核心原因其实很简单——函数返回值类型不匹配导致了小数部分被截断,咱们来仔细捋一捋:
为什么两个结果不一样?
- 先看你的
sum函数:它的返回类型是int(整数类型)。当你计算x / y(也就是12 / 5)时,虽然结果是2.4,但因为函数要返回int,C++会自动把这个浮点数强制转换为整数,直接丢弃小数部分,所以最终返回的是2,输出自然就是2。 - 再看
main函数里的c = a / b:这里a是int类型,b是float类型。C++在进行不同类型的数值运算时,会触发隐式类型转换——把int类型的a转换成float类型,然后再做除法运算,得到的结果是2.4,赋值给同样是float类型的c,所以输出就是2.4。
怎么修改才能让两个结果一致?
只需要把sum函数的返回类型从int改成float(或者double,精度更高)就行,修改后的函数如下:
float sum(int x, float y){ return (x / y); }
这样函数返回的就是浮点数,不会截断小数部分,调用sum(12,5)就会输出2.4了。
另外补充个小知识点:C++里整数类型转换时是直接截断小数,不是四舍五入哦,比如3.9转成int会变成3,这点要注意~
内容的提问来源于stack exchange,提问作者Rakesh Kr Yadav
相关产品推荐
相关产品推荐

