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

C++编写找零计算程序运行结果与预期不符问题咨询

找零计算错误问题分析与修复

问题根源

核心是二进制浮点数的精度丢失问题:

  • double类型是二进制存储,0.65、0.95这类十进制小数无法被精准表示,实际计算0.95 - 0.65的结果不是精确的0.3,而是约等于0.2999999999999998的近似值
  • 你直接将差值乘以100后强转为int时,会直接截断小数部分,本该等于30的找零分就被错误截断为29,后续计算自然得到1个25分、剩余4分的错误结果,和你看到的输出完全吻合。

修复方案

快速修复方案

在转换为整数时增加极小的偏移量抵消浮点误差,修改change计算行即可:

// 增加0.001分的偏移量,不会影响正常计算结果,同时解决截断误差
int change = static_cast<int>((x - y) * 100 + 0.001);

最优实践方案

金融、金额类计算场景下,完全避免使用浮点数存储金额,全程用整数单位(分)做存储和计算,从根源上杜绝精度问题:

  • 输入时可直接读取金额的整数分,或者将输入的浮点值先加偏移转成整数分后再做后续所有运算
    另外你代码里的硬币拼写存在小问题:Penney应为Penny,复数形式是Pennies。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:57:02