Adición para BigDecimal

Quiero hacer algunas sums simples con algunos valores monetarios expresados ​​en tipo 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); 

Obviamente no entiendo bien la aritmética BigDecimal , vea la salida detrás.

 Test 0 0 0 

¿Puede alguien ayudarme?

El BigDecimal es inmutable, así que debes hacer esto:

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

Parece que desde los documentos de Java aquí que agrega se devuelve un nuevo 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); 
 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); 

En realidad es bastante fácil. Solo haz esto:

 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); 

Ver también: BigDecimal#add(java.math.BigDecimal)

BigInteger es inmutable, necesitas hacer esto,

  BigInteger sum = test.add(new BigInteger(30)); System.out.println(sum); 
 //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 
 BigDecimal no = new BigDecimal(10); //you can add like this also no = no.add(new BigDecimal(10)); System.out.println(no); 

20

 BigDecimal demo = new BigDecimal(15); 

Es inmutable porque almacena internamente su entrada, es decir, (15) como final private final BigInteger intVal; y el mismo uso del concepto en el momento de la creación de la cadena, cada entrada finalmente se almacena en private final char value[]; . Así que no hay ningún error implícito.

Solo otro ejemplo para agregar BigDecimals . El punto clave es que son inmutables y solo se pueden inicializar en el constructor. Aquí está el código:

 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()); } } 

También puedes hacerlo así:

 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); 

Huellas dactilares:

A + B + C = 60000000000