Domanda
Voglio fare alcune semplici somme con alcuni valori di valuta espressi in 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);
Ovviamente non capisco bene le aritmetica BigDecimal
, vedi uscita dietro.
Test
0
0
0
Qualcuno mi può aiutare?
Soluzione
Il BigDecimal
è immutabile, quindi è necessario fare questo:
BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);
Altri suggerimenti
Sembra che dalla Java docs qui che aggiungere restituisce una nuova 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);
In realtà è piuttosto facile. Basta fare questo:
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);
Vedi anche: BigDecimal#add(java.math.BigDecimal)
BigInteger è immutabile, è necessario fare questo,
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
È anche possibile fare in questo modo:
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);
Stampe:
A + B + C = 60 miliardi
BigDecimal demo = new BigDecimal(15);
Si è immutabile Allucinante internamente si memorizzare ingresso cioè (15) come final private final BigInteger intVal;
e lo stesso uso concetto al momento della creazione stringa ogni ingresso infine memorizzare in
private final char value[];
.So non v'è alcun bug implmented.
Solo un altro esempio da aggiungere BigDecimals
. Punto chiave è che sono immutabili e possono essere inizializzati solo nel costruttore. Ecco il codice:
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());
}
}