web-dev-qa-db-fra.com

ajout de 2 valeurs BigDecimal

class Point {

  BigDecimal x;
  BigDecimal y;

  Point(double px, double py) {
    x = new BigDecimal(px);
    y = new BigDecimal(py);
  }

  void addFiveToCoordinate(String what) {
    if (what.equals("x")) {
      BigDecimal z = new BigDecimal(5);
      x.add(z);
    }
  }

  void show() {
    System.out.print("\nx: " + getX() + "\ny: " + getY());
  }

  public BigDecimal getX() {
    return x;
  }

  public BigDecimal getY() {
    return y;
  }

  public static void main(String[] args) {
    Point p = new Point(1.0, 1.0);
    p.addFiveToCoordinate("x");
    p.show();
  }
}

Ok, je voudrais ajouter 2 valeurs BigDecimal. J'utilise un constructeur avec des doubles (car je pense que c'est possible - il y a une option dans la documentation). Si je l'utilise en classe principale, j'obtiens ceci:

x: 1
y: 1

Lorsque j'utilise System.out.print pour afficher ma variable z, j'obtiens ceci:

z: 5
30
Marcin Erbel

BigDecimal est immuable. Chaque opération renvoie une nouvelle instance contenant le résultat de l'opération:

 BigDecimal sum = x.add(y);

Si vous voulez que x change, vous devez donc faire

x = x.add(y);

Lire le javadoc aide vraiment à comprendre comment une classe et ses méthodes fonctionnent.

66
JB Nizet

C'est peut-être ce que vous préférez:

BigDecimal z = new BigDecimal(5).add(x);

Chaque opération de BigDecimal renvoie un nouveau BigDecimal mais ne modifie pas l'instance actuelle.

7
Buhake Sindi