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