sumar setscale round multiply decimals java bigdecimal

setscale - string to bigdecimal java



Adición para BigDecimal (10)

BigInteger es inmutable, necesitas hacer esto,

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

Quiero hacer algunas sumas 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);


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)


Parece que desde los documentos de Java here 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);


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


//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 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.


BigDecimal no = new BigDecimal(10); //you can add like this also no = no.add(new BigDecimal(10)); System.out.println(no);

20


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