求助: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
相关产品推荐
相关产品推荐

