为何C++中浮点数相除无法得到浮点结果?函数返回值问题排查
问题原因及解决方案
你的代码里有两个关键问题导致返回结果不符合预期,其中最直接影响当前输出的是函数返回类型错误:
返回类型为
int导致浮点数被截断
你声明money函数的返回类型是int,即便salary / workingdays计算出带小数的浮点数(比如134.333),执行return时会自动丢弃小数部分,只保留整数部分,所以最终返回134而非你期望的浮点数结果。整数除法导致工作日计算存在精度隐患(潜在问题)
计算(days / 7) * 2时,days是int类型,days/7会触发整数除法——直接舍去小数部分仅保留整数。比如当days=22时,22/7结果是3而非3.142...,算出的休息日是6天,工作日为16天;但如果按精确比例计算,休息日应为22*(2/7)≈6.285天,工作日≈15.714天。如果你的需求是按精确比例计算工作日,需要把days转换成浮点数后再运算,比如(static_cast<float>(days) / 7) * 2。
修正后的代码
#include <iostream> using namespace std; // 将返回类型改为float,保留小数结果 float money(float salary, int days) { // 若需要精确计算工作日,先将days转为float再做除法运算 float workingdays = days - (static_cast<float>(days) / 7 * 2); return salary / workingdays; } int main() { cout << money(2015, 21) << "\n"; // 输出134.333 cout << money(4500, 40) << "\n"; // 输出150 return 0; }
内容的提问来源于stack exchange,提问作者Ahmad Al-Ateek
相关产品推荐
相关产品推荐

