168

BigDecimal我想用一些以类型表示的货币值做一些简单的求和。

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test.add(new BigDecimal(30));
System.out.println(test);
test.add(new BigDecimal(45));
System.out.println(test);

显然我不太了解BigDecimal算术,请参阅后面的输出。

Test
0
0
0

谁能帮我吗?

4

12 回答 12

297

是不可变的BigDecimal,所以你需要这样做:

BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);
于 2009-12-04T13:24:10.587 回答
35

从这里的 Java 文档中看起来add 返回一个新的 BigDecimal:

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);
于 2009-12-04T13:24:43.153 回答
16
BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);
于 2009-12-04T13:24:04.200 回答
10

这实际上相当容易。只需这样做:

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);

也可以看看:BigDecimal#add(java.math.BigDecimal)

于 2009-12-04T13:25:09.160 回答
9

BigInteger 是不可变的,你需要这样做,

  BigInteger sum = test.add(new BigInteger(30));  
  System.out.println(sum);
于 2009-12-04T13:23:42.657 回答
4
//you can do in this way...as BigDecimal is immutable so cant set values except in constructor

BigDecimal test = BigDecimal.ZERO;
BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);

result would be 30
于 2012-01-04T15:08:37.213 回答
3
BigDecimal no = new BigDecimal(10); //you can add like this also
no = no.add(new BigDecimal(10));
System.out.println(no);

20

于 2014-07-18T08:42:25.010 回答
2

你也可以这样做:

BigDecimal A = new BigDecimal("10000000000");
BigDecimal B = new BigDecimal("20000000000");
BigDecimal C = new BigDecimal("30000000000");
BigDecimal resultSum = (A).add(B).add(C);
System.out.println("A+B+C= " + resultSum);

印刷:

A+B+C= 60000000000

于 2017-12-06T05:08:41.287 回答
2

BigInteger 是不可变的,就像字符串一样。这意味着一旦创建了对象,我们就无法更改它的内容,但我们可以重新分配它。

 BigInteger sum = test.add(new BigInteger(30));  
 System.out.println(sum);

.add() 将返回一个新对象

于 2021-10-02T02:10:37.390 回答
1

使用 Java8 lambda

List<BigDecimal> items = Arrays.asList(a, b, c, .....);

items.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);

这涵盖了列表中的部分或全部对象为空的情况。

于 2019-11-19T16:46:01.177 回答
0
BigDecimal demo = new BigDecimal(15);

它是不可变的,因为它在内部存储您的输入,即 (15), final private final BigInteger intVal; 并且在创建字符串时使用相同的概念,每个输入最终都存储在 private final char value[];. 所以没有实现的错误。

于 2017-04-18T13:49:36.917 回答
0

只是要添加的另一个示例BigDecimals。关键是它们是不可变的,它们只能在构造函数中初始化。这是代码:

import java.util.*;
import java.math.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc;
        boolean first_right_number = false;
        BigDecimal initBigDecimal = BigDecimal.ZERO;
        BigDecimal add1 = BigDecimal.ZERO;
        BigDecimal add2 = BigDecimal.ZERO;

        while (!first_right_number)
        {
            System.out.print("Enter a first single numeric value: ");
            sc = new Scanner(System.in);
            if (sc.hasNextBigDecimal()) 
            {
                first_right_number = true;
                add1 = sc.nextBigDecimal();
            }
        }

        boolean second_right_number = false;
        while (!second_right_number)
        {
            System.out.print("Enter a second single numeric value: ");
            sc = new Scanner(System.in);
            if (sc.hasNextBigDecimal()) 
            {
                second_right_number = true;
                add2 = sc.nextBigDecimal();
            }
        }
        BigDecimal result = initBigDecimal.add(add1).add(add2);
        System.out.println("Sum of the 2 numbers is: " + result.toString());
    }
}
于 2017-06-17T19:35:14.177 回答