Дополнение для 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
может кто-нибудь помочь мне?
10 ответов:
The
BigDecimal
является неизменным, поэтому вам нужно сделать это:BigDecimal result = test.add(new BigDecimal(30)); System.out.println(result);
это похоже на Java 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);
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);
BigInteger является неизменным, вам нужно сделать это,
BigInteger sum = test.add(new BigInteger(30)); System.out.println(sum);
это на самом деле довольно легко. Просто сделайте это:
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)
//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
BigDecimal demo = new BigDecimal(15);
он неизменен, потому что он внутренне хранит ваш ввод, т. е. (15) как
final private final BigInteger intVal;
и то же самое использование концепции во время создания строки каждый вход, наконец, хранить вprivate final char value[];
. Таким образом, нет никакой имплантированной ошибки.
еще один пример, чтобы добавить
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()); } }