Go4Expert (http://www.go4expert.com/)
-   Meet and Greet (http://www.go4expert.com/community/meet-and-greet/)
-   -   Problem with simple program to compute change (http://www.go4expert.com/community/simple-program-compute-change-t18059/)

 dhess62 16Jun2009 23:09

Problem with simple program to compute change

This program takes a number of pennies and converts it to dollars, quarters, dimes, nickels and pennies, here is the code that I wrote. The problem is, for some reason it always throws in a nickel when it computes the change for any amount that has a penny in it. Any ideas as to why?

example if you give it 346 pennies will return:
3 Dollars
1 Quarter
2 Dimes
1 Nickel <<<there's the problem
1 Penny

Code: VB.NET

`Private Sub btnCalculateChange_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculateChange.Click        txtNumOfPennies = Convert.ToInt32(Me.txtNumOfPennies.Text)        Me.txtDollar.Text = Int((txtNumOfPennies.Text) / 100)        Me.txtQuarter.Text = Int(((txtNumOfPennies.Text) Mod 100) / 25)        Me.txtDime.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) / 10)        Me.txtNickel.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10 / 5)        Me.txtPenny.Text = Int(((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10) Mod 5)`

Re: Problem with simple program to compute change

Hi, and Welcome to G4EF ! :)

You have a flaw in the code. You miss a pair of brackets.
Look at this line :

Code: VB.NET

`Me.txtNickel.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10 / 5)`

As the division operator '/' has higher priority than Mod, The above code simplifies to :

Code: VB.NET

`Me.txtNickel.Text = Int((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 2)`

What you noticed :
Quote:
 Originally Posted by dhess62 (Post 49716) The problem is, for some reason it always throws in a nickel when it computes the change for any amount that has a penny in it.
is correct. 1 Mod 2 = 1 Mod 5 = 1

So to correct the problem, just change the above line to :

Code: VB.NET

`Me.txtNickel.Text = Int(((((txtNumOfPennies.Text) Mod 100) Mod 25) Mod 10) / 5)`

 All times are GMT +5.5. The time now is 02:30.