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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:03