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

C++实现银行家舍入法:修改DollarAmount类复利计算逻辑问题

C++ 银行家舍入法实现修复方案

核心问题定位

你现有逻辑的问题出在判断时机错误:先完成了常规四舍五入再判断银行家舍入触发条件,此时小数部分为0.5的场景已经被提前进位,对应判断分支自然无法触发。

实现逻辑修正

银行家舍入的正确判断流程:

  • 先计算整除的商和余数
  • 余数大于0.5单位时正常进位
  • 余数小于0.5单位时不进位
  • 余数恰好等于0.5单位时,判断商的奇偶性:奇数进位,偶数保持原值

代码修改示例

假设你使用的教材示例中DollarAmount类用整数amount存储总分数(避免浮点数误差,1元对应100),修改后的addInterest方法如下:

// 原方法入参:rate为利率,divisor为除数(固定为100对应百分比计算)
void DollarAmount::addInterest(int rate, int divisor) {
    // 转long long避免整数溢出
    long long total = static_cast<long long>(amount) * rate;
    int quotient = total / divisor;
    int remainder = total % divisor;
    int half = divisor / 2;

    if (remainder > half) {
        quotient++;
    } else if (remainder == half) {
        // 仅当余数恰好为0.5单位时,向偶数舍入
        if (quotient % 2 != 0) {
            quotient++;
        }
    }
    amount += quotient;
}

divide方法可复用完全一致的判断逻辑,仅需修改计算商和余数的输入即可。

测试用例验证

  • 输入2 100(利率2%,初始本金100元):按上述逻辑计算10年复利,最终总分为121898,对应输出1218.98,符合预期
  • 输入5 1000000(利率5%,初始本金1000元):利息计算时余数恰好为除数的1/2,商为0(偶数),因此利息始终为0,余额保持1000元,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:45:02