web-dev-qa-db-fra.com

Ajout pour BigDecimal

Je veux faire des sommes simples avec des valeurs de devise exprimées en type 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);

De toute évidence, je ne comprends pas bien l'arithmétique BigDecimal, voir la sortie ci-dessous.

Test
0
0
0

Quelqu'un peut m'aider?

136
Sergio del Amo

La BigDecimal est immuable, vous devez donc procéder comme suit:

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

Cela ressemble aux documents Java ici que add renvoie un nouveau 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);
30
Ankur Goel
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);
16
Maurice Perry

C'est en fait plutôt facile. Faites juste ceci:

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

Voir aussi: BigDecimal#add(Java.math.BigDecimal)

10
nfechner

BigInteger est immuable, vous devez le faire,

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

20

3
Yatish

Vous pouvez aussi le faire comme ça:

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

Impressions:

A + B + C = 60000000000

1
Artur Krawczyk

Juste un autre exemple pour ajouter BigDecimals. Le point clé est qu’ils sont immuables et qu’ils ne peuvent être initialisés que dans le constructeur. Voici le code:

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());
    }
}
0
Paolo Leoncini
BigDecimal demo = new BigDecimal(15);

Il est immuable, car il stocke en interne votre entrée i.e (15) sous la forme final private final BigInteger intVal; Et le même concept est utilisé au moment de la création de la chaîne, chaque entrée est finalement stockée dans private final char value[];.Alors il n’ya pas de bogue implémenté.

0
snipersnack