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

请求排查C++代码计算逻辑错误:牛奶产量相关结果不符

解决C++牛奶产量计算中纸箱数与利润的精度偏差问题

嘿,我瞅见你这个编程练习里碰到了俩小问题——纸箱数量少算了1个,利润也和预期有细微出入,咱们来一步步捋清楚咋解决!

问题根源分析

咱们先拆解下你遇到的两个问题:

  1. 纸箱数量少1个:你现在用static_cast<int>(numCartons)直接把浮点结果的小数部分截断了,但实际生产逻辑里,哪怕剩下一点点牛奶,也得额外用一个纸箱来装。比如输入3590.56时,3590.56 / 3.78 ≈ 949.883,截断后得到949,但实际需要950个纸箱,这时候得用向上取整而不是直接截断。
  2. 利润偏差:你的利润是用浮点型的numCartons(≈949.883)乘以0.27计算的,结果≈256.47,但预期利润是基于实际需要的950个纸箱计算的(950*0.27=256.5),所以本质上是纸箱数的计算方式不对导致了利润的偏差。

修改后的代码

要解决这俩问题,咱们需要做两处调整:

  • 引入<cmath>头文件,使用ceil()函数来实现向上取整
  • 先计算向上取整后的纸箱数,再用这个整数来计算利润
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
#include<cmath> // 新增:用于ceil()函数
using namespace std;
const double CARTON = 3.78;
const double PRODUCECOST = 0.38;
const double PROFIT = 0.27;
int main() {
 double milkProduced;
 int numCartons; // 改为int类型,因为纸箱数是整数
 double costOfProducing, profitOfProducing;
 cout << fixed << showpoint << setprecision(2);
 cout << "What was the total amount of milk produced in the morning: " << endl;
 cin >> milkProduced;
 // 重点:用ceil()向上取整,再转成int
 numCartons = static_cast<int>(ceil(milkProduced / CARTON));
 costOfProducing = milkProduced * PRODUCECOST;
 profitOfProducing = numCartons * PROFIT; // 用整数纸箱数计算利润
 cout << numCartons << endl;
 cout << costOfProducing << endl;
 cout << profitOfProducing << endl;
 return 0;
}

验证结果

用你的示例输入3590.56测试:

  • 纸箱数:ceil(3590.56/3.78) = ceil(949.883) = 950,符合预期
  • 利润:950 * 0.27 = 256.5,完全匹配预期
  • 生产成本:3590.56 * 0.38 = 1364.4128,保留两位小数后是1364.41,和你之前的正确结果一致

额外提示

  • ceil()函数会返回大于等于输入值的最小整数,正好贴合“哪怕剩一点牛奶也要多一个纸箱”的业务逻辑
  • 记得一定要包含<cmath>头文件,不然编译器会找不到ceil()函数哦

内容的提问来源于stack exchange,提问作者Darunia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:52:55