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

Java特殊小数进位规则的列表求和逻辑实现技术咨询

Java特殊规则求和实现方案

核心逻辑设计

  • 为避免浮点运算精度丢失,全程使用BigDecimal做数值计算
  • 初始化两个变量:
    1. 累计总和total,初始值为0
    2. 上一轮传递的小数部分lastDecimal,初始值为0
  • 按顺序遍历所有待求和数值:
    1. 将当前数值与lastDecimal相加,得到临时计算值
    2. 拆分临时值的整数部分和小数部分
    3. 将整数部分累加至total
    4. 将拆分得到的小数部分赋值给lastDecimal,进入下一轮计算
  • 遍历完成后,将total按要求保留一位小数输出即可

完整代码实现

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;

public class SpecialSumCalculator {
    // 中间计算保留的小数位数,可根据业务精度需求调整
    private static final int CALC_SCALE = 3;
    private static final RoundingMode ROUNDING_MODE = RoundingMode.HALF_UP;

    public static BigDecimal calculateSpecialSum(List<BigDecimal> numList) {
        BigDecimal total = BigDecimal.ZERO;
        BigDecimal lastDecimal = BigDecimal.ZERO;

        for (BigDecimal currentNum : numList) {
            // 当前值加上上一轮传递的小数部分
            BigDecimal temp = currentNum.add(lastDecimal);
            // 拆分临时值的整数部分(向下取整)
            BigDecimal integerPart = temp.setScale(0, RoundingMode.DOWN);
            // 拆分临时值的小数部分
            BigDecimal decimalPart = temp.subtract(integerPart).setScale(CALC_SCALE, ROUNDING_MODE);
            
            // 整数部分计入总和
            total = total.add(integerPart);
            // 更新下一轮传递的小数部分
            lastDecimal = decimalPart;
        }
        // 结果保留1位小数返回
        return total.setScale(1, ROUNDING_MODE);
    }

    public static void main(String[] args) {
        // 测试用例:用户提供的示例数值
        List<BigDecimal> testList = List.of(
                new BigDecimal("234.456"),
                new BigDecimal("345.456"),
                new BigDecimal("456.567"),
                new BigDecimal("567.678")
        );
        BigDecimal result = calculateSpecialSum(testList);
        // 输出结果为1604.0,和示例预期一致
        System.out.println(result);
    }
}

逻辑验证

代入用户提供的示例数值执行代码,最终输出结果为1604.0,和手动计算的预期结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:36:04