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

求助:C++单向选择代码报错,总价大于50时if语句不执行如何修复?

问题排查与修正方案

核心问题分析

  • 折扣计算逻辑错误是你误以为if未执行的主要原因:C++中默认的整数除法规则会对结果向下取整,30/100两个操作数都是int类型,计算结果直接为0,所以即使进入if分支,总价格也不会有任何变化,看起来就像if没有触发。
  • 浮点数直接比较存在精度风险:浮点数计算存在精度误差,直接用>和整数50比较,极端情况下会出现实际值应大于50但因存储精度不足导致判断失败的问题。

修正后的代码

#include <iostream>
using namespace std;

int main()
{
    int numbersOfPen;
    float totalPrice;
    cout << "Enter numbers of pen:";
    cin >> numbersOfPen;
    totalPrice = 1.20f * numbersOfPen;
    
    // 浮点数比较加极小容差,避免精度问题
    if (totalPrice > 50.0f - 1e-6)
    {
        // 改为浮点数运算,避免整数除法得到0
        totalPrice = totalPrice - (totalPrice * 0.3f);
    }
    cout << "Total price is RM" << totalPrice;
     
    return 0;
}

修改点说明

  • 把30/100替换为0.3f,直接使用浮点数计算折扣比例,避免整数除法错误
  • 浮点数比较添加了1e-6的容差,避免计算精度误差导致的判断失败
  • 删除了原代码中未使用的变量total,避免编译警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:04