我想用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
任何人都可以帮助我吗?
答案 0 :(得分:253)
BigDecimal
是不可变的,所以你需要这样做:
BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);
答案 1 :(得分:31)
从Java文档here看起来,添加返回一个新的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);
答案 2 :(得分: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);
答案 3 :(得分: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);
答案 4 :(得分:9)
BigInteger是不可变的,你需要这样做,
BigInteger sum = test.add(new BigInteger(30));
System.out.println(sum);
答案 5 :(得分: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
答案 6 :(得分:3)
BigDecimal no = new BigDecimal(10); //you can add like this also
no = no.add(new BigDecimal(10));
System.out.println(no);
20
答案 7 :(得分:1)
你也可以这样做:
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
答案 8 :(得分:0)
BigDecimal demo = new BigDecimal(15);
它是不可变的,因为它在内部存储你输入,即(15)为final private final BigInteger intVal;
并且在创建字符串时使用相同的概念,每个输入最终存储在
private final char value[];
。所以没有任何错误。
答案 9 :(得分: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());
}
}
答案 10 :(得分:0)
使用Java8 lambdas
List<BigDecimal> items = Arrays.asList(a, b, c, .....);
items.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
这涵盖了列表中部分或全部对象为空的情况。