# Calculation with BigDecimal : BigDecimal « Data Type « Java

Calculation with BigDecimal

```

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;

public class BigDecimalInvoiceApp {
public static void main(String[] args) {
double subtotal = 123.123;

double discountPercent = 0.2;
BigDecimal decimalSubtotal = new BigDecimal(Double.toString(subtotal));
decimalSubtotal = decimalSubtotal.setScale(2, RoundingMode.HALF_UP);
BigDecimal decimalDiscountPercent = new BigDecimal(Double.toString(discountPercent));

BigDecimal discountAmount = decimalSubtotal.multiply(decimalDiscountPercent);
discountAmount = discountAmount.setScale(2, RoundingMode.HALF_UP);

BigDecimal totalBeforeTax = decimalSubtotal.subtract(discountAmount);
BigDecimal salesTaxPercent = new BigDecimal(".05");
BigDecimal salesTax = salesTaxPercent.multiply(totalBeforeTax);
salesTax = salesTax.setScale(2, RoundingMode.HALF_UP);

NumberFormat currency = NumberFormat.getCurrencyInstance();
NumberFormat percent = NumberFormat.getPercentInstance();

String message = "Subtotal:         " + currency.format(decimalSubtotal) + "\n"
+ "Discount percent: " + percent.format(decimalDiscountPercent) + "\n"
+ "Discount amount:  " + currency.format(discountAmount) + "\n" + "Total before tax: "
+ currency.format(totalBeforeTax) + "\n" + "Sales tax:        " + currency.format(salesTax)
+ "\n" + "Invoice total:    " + currency.format(total) + "\n";

System.out.println(message);

}
}
/*Subtotal:         \$123.12
Discount percent: 20%
Discount amount:  \$24.62
Total before tax: \$98.50
Sales tax:        \$4.93
Invoice total:    \$103.43
*/

```

### Related examples in the same category

 1 Round a double 2 Create Big Decimal Values via a long 3 Create a BigDecimal vis string 4 Multiply one BigDecimal to another BigDecimal 5 Subtract from one BigDecimal another BigDecimal 6 Divide one BigDecimal from another BigDecimal 7 Negate a BigDecimal 8 Setting the Decimal Place of a Big Decimal Value 9 Truncates the big decimal value 10 Do math operation for BigDecimal 11 Operate with big decimal values 12 Round a double by setting the scale 13 Create Big Decimal Values via a string 14 Parse BigDecimal 15 Formats BigDecimal into a SQL floating-point literal 16 Value is rounded using the given method which is any method defined in BigDecimal 17 Round the given value to the specified number of decimal places. The value is rounded using the BigDecimal.ROUND_HALF_UP method. 18 Convert Object to BigDecimal 19 BigDecimal and BigInteger sqare root 20 BigDecimal quadratic