CIS 35A: Introduction to Java Programming

Home | Green Sheet | Lectures | Assignments | FAQ

Data

Data
Decimal data
BigDecimal class

The Invoice application output when BigDecimal arithmetic is used


The code for using BigDecimal arithmetic in the Invoice application

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

public class BigDecimalInvoiceApp
{
    public static void main(String[] args)
    {
       	// create a Scanner object named sc
		Scanner sc = new Scanner(System.in);

        // perform invoice calculations until choice isn't equal to "y" or "Y"
        String choice = "y";
        while (!choice.equalsIgnoreCase("n"))
        {
		    // get the input from the user
            System.out.print("Enter subtotal:   ");
        	double subtotal = sc.nextDouble();

        	// calculate the discount amount and invoice total before tax
        	double discountPercent = 0.0;
        	if (subtotal >= 200)
        		discountPercent = .2;
        	else if (subtotal >= 100)
        		discountPercent = .1;
        	else
        		discountPercent = 0.0;

         	// convert subtotal and discount percent to BigDecimal
   			BigDecimal decimalSubtotal = new BigDecimal(Double.toString(subtotal));
   			decimalSubtotal = decimalSubtotal.setScale(2, RoundingMode.HALF_UP);
			BigDecimal decimalDiscountPercent =
			    new BigDecimal(Double.toString(discountPercent));

			// calculate discount amount
			BigDecimal discountAmount = decimalSubtotal.multiply(decimalDiscountPercent);
			discountAmount = discountAmount.setScale(2, RoundingMode.HALF_UP);

			// calculate total before tax, sales tax, and total
			BigDecimal totalBeforeTax = decimalSubtotal.subtract(discountAmount);
           	BigDecimal salesTaxPercent = new BigDecimal(".05");
        	BigDecimal salesTax = salesTaxPercent.multiply(totalBeforeTax);
        	salesTax = salesTax.setScale(2, RoundingMode.HALF_UP);
        	BigDecimal total = totalBeforeTax.add(salesTax);

        	// get the currency and percent formatter objects
        	NumberFormat currency = NumberFormat.getCurrencyInstance();
        	NumberFormat percent = NumberFormat.getPercentInstance();

            // display the discount amount and total
        	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);

        	// see if the user wants to continue
        	System.out.print("Continue? (y/n): ");
        	choice = sc.next();
        	System.out.println();
		}
    }
}
Previous | BigDecimal class | Use BigDecimal