# Math Remainder Issue

• September 12th, 2012, 01:18 PM
bzhagar
Math Remainder Issue
Hi, everyone. I would like to take the time to thank you all in advance for the time you take to review and assist with my dilemma(s). This is my first post and I apologize if I make any errors pertaining to the prescribed forum guidelines. I appreciate any criticism!

I began my Java journey buy reading a free online pdf textbook about programming in Java. I am half way through and now have an elementary understanding of the basics of Java. I am trying to master the resources I have read through creating programs including each section. The program I am trying to code is a simple change counter where the user gives a value (i.e. \$232.75) and the program gives them the breakdown of bills that will be given back in change. This is a similar concept as to what a modern cash register does. I have written the code and anytime the input consists of something other than 100's or 20's, the program displays a value of 0 for the rest of forms of money such as quarters, 10's, pennies...

Code Java:

```import java.util.Scanner;   public class Change {   private static Scanner input;   public static void main(String[] args) { input = new Scanner (System.in);   double money; //User specified value to convert int change; //Converted "Money" to int type int hund, twend, tend, fived, oned, quarters, dimes, nickels, pennies; //The forms change can be given in int afthund, afttwend, afttend, aftfived, aftoned, aftquarters, aftdimes, aftnickels; //Money left over following each form of change   System.out.println("How much money would you like me to give you change for?"); //Ask the user for a value money = input.nextDouble(); money = money * 100; //Multiply double "money" by 100 to later work with integers change = (int)(money); //Typecast double "money" to an int value   hund = change / 10000; //Divide change by 10,000 (hund) -- hundred dollars afthund = change % 10000; //then get amount left over (afthund) -- after hundred dollars   twend = afthund / 2000; //Divide afthund by 2000 (twend) afttwend = twend % 2000; //then get amount left over (afttwend)   tend = afttwend / 1000; //Divide aftwend by 1000 (tend) afttend = tend % 1000; //then get amount left over (afttend)   fived = afttend / 500; //Divide afttend by 500 (fived) aftfived = fived % 500; //then get amount left over (aftfived)   oned = aftfived / 100; //Divide aftfived by 100 (oned) aftoned = oned % 100; //then get amount left over (aftoned)   quarters = aftoned / 25; //Divide aftoned by 25 (quarters) aftquarters = quarters % 25; //then get amount left over (aftquarters)   dimes = aftquarters / 10; //Divide aftquarters by 10 (dimes) aftdimes = dimes % 10; //then get amount left over (aftdimes)   nickels = aftdimes / 5; //Divide aftdimes by 5 (nickels) aftnickels = nickels % 5; //then get amount left over (aftnickels)   pennies = aftnickels; //Remainder is pennies   System.out.print("Hundreds: " + hund); //Print hundreds System.out.println();   System.out.print("Twenties: " + twend); //Print twenties System.out.println();   System.out.print("Tens: " + tend); //Print tens System.out.println();   System.out.print("Fives: " + fived); //Print fives System.out.println();   System.out.print("Ones: " + oned); //Print ones System.out.println();   System.out.print("Quarters: " + quarters); //Print quarters System.out.println();   System.out.print("Dimes: " + dimes); //Print dimes System.out.println();   System.out.print("Nickels: " + nickels); //Print nickels System.out.println();   System.out.print("Pennies: " + pennies); //Print pennies System.out.println();   }     }```

I have provided as much documentation as possible. If you have any ideas for a solution or if I need to start over, please let me know.
Have a great day,
bzhagar
• September 12th, 2012, 01:27 PM
Norm
Re: Math Remainder Issue
Try debugging the code by printing out the results of each computation with a println() statement so you can see the results of each expression. Be sure to add labels to all the printouts. Something like this:
Code :

` System.out.println("ae="+ae);`
Change ae to the names of the variables used in your code.

If you can't understand what is happening in the code, copy and paste here what is printed out by the added printlns and ask questions about the results that you don't understand.

Quote:

displays a value of 0
A common reason for that is the code is using integer arithmetic: 4/10 = 0

Please copy and paste here the console from when you execute the program that shows the input and its output.
On windows: To copy the contents of the command prompt window:
Click on Icon in upper left corner
Select Edit
Select 'Select All' - The selection will show
Click in upper left again
Select Edit and click 'Copy'

Paste here.
• September 12th, 2012, 04:13 PM
bzhagar
Re: Math Remainder Issue
I am glad to say that given the wise advice of Norm, I came up with a working program. I had to test a few things before finally getting the program right.
1. The main problem I was experiencing was due to the integer arithmetic issue -- I solved this by simply making the variables of type double
2. I was unable to carry the variables to the next expression as well as print them in the same form -- My solution was to create a third set of variable to specifically print from.
3. Simple mathematical errors

Now my problem is that when I debug the code by printing out each set of computations, I recieve long decimals that are a fraction off of the true value. Such as "2.6999999999999886" when it should really be "2.70".

Code Java:

```import java.util.Scanner;     public class Change {   private static Scanner input;   public static void main(String[] args) { input = new Scanner (System.in);   double change; //User input value double hund, twend, tend, fived, oned, quarters , dimes, nickels; double afthund, afttwend, afttend, aftfived, aftoned, aftquarters, aftdimes, aftnickels; double hundreds, twenties, tens, fives, ones, twentyfivecents, tencents, fivecents;   System.out.println("How much money would you like me to give you change for?"); change = input.nextDouble();   hund = change; afthund = hund % 100.00; hund = hund - afthund; hundreds = hund / 100;   System.out.println("lna1= " + hund); System.out.println("lna2= " + afthund); System.out.println();     twend = afthund; afttwend = twend % 20.00; twend = twend - afttwend; twenties = twend / 20;   System.out.println("lnb1= " + twend); System.out.println("lnb2= " + afttwend); System.out.println();     tend = afttwend; //Divide aftwend by 10.00 (tend) afttend = tend % 10.00; //then get amount left over (afttend) tend = tend - afttend; tens = tend / 10;   System.out.println("lnc1= " + tend); System.out.println("lnc2= " + afttend); System.out.println();     fived = afttend; aftfived = fived % 5.00; fived = fived - aftfived; fives = fived / 5;   System.out.println("lnd1= " + fived); System.out.println("lnd2= " + aftfived); System.out.println();     oned = aftfived; aftoned = oned % 1.00; oned = oned - aftoned; ones = oned / 1.00;   System.out.println("lne1= " + oned); System.out.println("lne2= " + aftoned); System.out.println();     quarters = aftoned; aftquarters = quarters % .25; quarters = quarters - aftquarters; twentyfivecents = quarters / .25;   System.out.println("lnf1= " + quarters); System.out.println("lnf2= " + aftquarters); System.out.println();     dimes = aftquarters; aftdimes = dimes % .10; dimes = dimes - aftdimes; tencents = dimes / .10;   System.out.println("lng1= " + dimes); System.out.println("lng2= " + aftdimes); System.out.println();     nickels = aftdimes; aftnickels = nickels % .05; nickels = nickels - aftnickels; fivecents = nickels / .05;   System.out.println("lnh1= " + nickels); System.out.println("lnh2= " + aftnickels); System.out.println();     System.out.print("Hundreds: " + (int)hundreds); //Print hundreds System.out.println();   System.out.print("Twenties: " + (int)twenties); //Print twenties System.out.println();   System.out.print("Tens: " + (int)tens); //Print tens System.out.println();   System.out.print("Fives: " + (int)fives); //Print fives System.out.println();   System.out.print("Ones: " + (int)ones); //Print ones System.out.println();   System.out.print("Quarters: " + (int)twentyfivecents); //Print quarters System.out.println();   System.out.print("Dimes: " + (int)tencents); //Print dimes System.out.println();   System.out.print("Nickels: " + (int)fivecents); //Print nickels System.out.println();   System.out.print("Pennies: " + (int)aftnickels); //Print pennies System.out.println();   }     }```

Strangely this does not affect the end result (even if the values are not typecasted into integers..)
** Except when there are pennies involved!

Much appreciated,
bzhagar
• September 12th, 2012, 04:30 PM
Norm
Re: Math Remainder Issue
You should leave the variables as ints and scale them up to the number of cents (*100) vs the number of dollars to keep from having values such as 2.699999999999988

The code needs more testing. Try this value:
Code :

` change = 237.77; //input.nextDouble();`

NOTE: Your labels on the print out are not the name of the values being printed:
Code :

```System.out.println("lna1= " + hund); vs System.out.println("hund= " + hund);```
• September 12th, 2012, 07:17 PM
bzhagar
Re: Math Remainder Issue
Went back to the original idea of using integers and a little R & D. Now have a fully functioning, bug free program. Maybe I'll make a GUI for it...
Thanks for the immensely helping advice, Norm. You helped me not only better my program, but also my knowledge of Java by making me explore the possibilities and guiding me when needed.
Till next time!
• September 12th, 2012, 07:41 PM
Norm
Re: Math Remainder Issue
I'm glad you got it working. See you next time.