开发者社区 问答 正文

BigDecimal数组的总和始终为零

我在Java中有一个BigDecimal数组,我想计算该数组所有元素的总和。我正在尝试以下代码:

public static void main(String[] args) {
        BigDecimal[] res = {
            new BigDecimal("20849603980134001723930671666823555245252804609722")
           ,new BigDecimal("53503534226472524250874054075591789781264330331690")};
        BigDecimal sum = BigDecimal.ZERO;
        //BigDecimal sum = new BigDecimal("0");
        for(BigDecimal s : res) sum.add(s);
        System.out.println(sum); 
    }

我的问题是sum变量为零:

run:
0
BUILD SUCCESSFUL (total time: 0 seconds)

我用两种方法创建了sum var,但是两种方法都给出相同的零值。

展开
收起
几许相思几点泪 2019-12-03 16:04:49 635 分享 版权
阿里云 AI 助理回答

在Java中,BigDecimal的加法操作是不可变的,这意味着每次调用add方法时,它并不会修改原始的BigDecimal对象,而是返回一个新的BigDecimal对象表示加法的结果。因此,在你的循环中,你需要将加法的结果赋值回sum变量,否则sum不会改变。

正确的代码应该是这样的:

public static void main(String[] args) {
    BigDecimal[] res = {
        new BigDecimal("20849603980134001723930671666823555245252804609722"),
        new BigDecimal("53503534226472524250874054075591789781264330331690")};
    BigDecimal sum = BigDecimal.ZERO;
    for(BigDecimal s : res) {
        sum = sum.add(s); // 注意这里将加法结果重新赋值给sum
    }
    System.out.println(sum);
}

这样修改后,sum会在每次循环中累加数组中的每个BigDecimal值,最终输出正确的总和。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: