C++实现负小数累加时无法正确识别大于0的浮点数问题
问题根因
- 你当前的代码逻辑存在缺陷:采用
if-else if分支判断,只要遇到第一个正数,就直接累加其余所有未做符号校验的数值,没有逐个判断所有输入的正负性,导致其余正数也被计入求和结果。 - 对应你的测试输入,第一个值10>0,触发第一个if分支,直接累加剩下的20.5、-2.2、-1.8,总和就是16.50,和你实际输出的结果一致。
修复方案
有两种常用修复思路,可按需选择:
思路1:适配固定4个输入的逐个校验写法
#include <iostream> #include <iomanip> using namespace std; int main() { float num1, num2, num3, num4, result = 0.0f; cin >> num1 >> num2 >> num3 >> num4; // 逐个判断数值符号,仅累加负数 if (num1 < 0) result += num1; if (num2 < 0) result += num2; if (num3 < 0) result += num3; if (num4 < 0) result += num4; cout << fixed << setprecision(2) << result; return 0; }
思路2:循环实现,后续拓展输入数量更灵活
#include <iostream> #include <iomanip> using namespace std; int main() { float result = 0.0f, temp; // 遍历4个输入,逐个判断累加 for(int i = 0; i < 4; i++){ cin >> temp; if(temp < 0) result += temp; } cout << fixed << setprecision(2) << result; return 0; }
验证结果
用测试输入10 20.5 -2.2 -1.8运行修复后的代码,仅会累加-2.2和-1.8,输出结果为-4.00,符合预期要求。
内容的提问来源于stack exchange,提问作者Julian Williams
相关产品推荐
相关产品推荐

