You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C++中浮点数相除无法得到浮点结果?函数返回值问题排查

问题原因及解决方案

你的代码里有两个关键问题导致返回结果不符合预期,其中最直接影响当前输出的是函数返回类型错误:

  1. 返回类型为int导致浮点数被截断
    你声明money函数的返回类型是int,即便salary / workingdays计算出带小数的浮点数(比如134.333),执行return时会自动丢弃小数部分,只保留整数部分,所以最终返回134而非你期望的浮点数结果。

  2. 整数除法导致工作日计算存在精度隐患(潜在问题)
    计算(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:22:49