Добавление для BigDecimal

Я хочу сделать несколько простых сумм с некоторыми значениями валюты, выраженными в типе 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);

Очевидно, я плохо разбираюсь в арифметике BigDecimal, см. вывод позади.

Test
0
0
0

Может ли кто-нибудь помочь мне?

BigDecimal является неизменным, поэтому вам нужно сделать это:

BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);
205
ответ дан 04 дек. '09 в 16:24
источник

Похоже, что из документа docs здесь добавлено новое 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);
27
ответ дан 04 дек. '09 в 16:24
источник
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);
15
ответ дан 04 дек. '09 в 16:24
источник

На самом деле это довольно легко. Просто сделайте следующее:

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#add(java.math.BigDecimal)

10
ответ дан 04 дек. '09 в 16:25
источник

BigInteger неизменен, вам нужно сделать это,

  BigInteger sum = test.add(new BigInteger(30));  
  System.out.println(sum);
9
ответ дан 04 дек. '09 в 16:23
источник
//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
ответ дан 04 янв. '12 в 18:08
источник
BigDecimal no = new BigDecimal(10); //you can add like this also
no = no.add(new BigDecimal(10));
System.out.println(no);

20

2
ответ дан 18 июля '14 в 11:42
источник
BigDecimal demo = new BigDecimal(15);

Это непреложный факт, что он внутренне сохраняет ваш вход i.e(15) как final private final BigInteger intVal; и такое же использование концепции во время создания строки каждый вход, наконец, хранится в private final char value[];. Таким образом, нет исправленной ошибки.

1
ответ дан 18 апр. '17 в 16:49
источник

Еще один пример добавления BigDecimals. Главное, что они неизменяемы, и их можно инициализировать только в конструкторе. Вот код:

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
ответ дан 17 июня '17 в 22:35
источник

Вы также можете сделать это следующим образом:

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

Печать

A + B + C = 60000000000

0
ответ дан 06 дек. '17 в 8:08
источник