Liczenie pieniedzy – dlaczego program nie zawsze liczy poprawnie?

0

dla wartości 322

Liczba bankotow 200 zlotowych 2 reszta 122
Liczba bankotow 100 zlotowych 1 reszta 22
Liczba bankotow 50 zlotowych 0 reszta 22

dla wartości 544

Liczba bankotow 200 zlotowych 3 reszta 144
Liczba bankotow 100 zlotowych 1 reszta 44
Liczba bankotow 50 zlotowych 1 reszta 44

pytanie: dlaczego raz liczy poprawnie raz nie?

 label2.Text = "";
            String a = textBox1.Text;

            if(String.IsNullOrEmpty(a) || !IsNumeric(a))
            {
                MessageBox.Show("Błąd programu. Spróbuj ponownie.");
            }
            else
            {
                double temp = Convert.ToDouble(a) % 200; //reszta z 200
                double temp2 = Convert.ToDouble(a) / 200; //liczba banknotow 200 zl
                
                if (Convert.ToDouble(a) >= 200)
                    label2.Text += "Liczba banknotow 200 zlotowych: "+ Math.Round(temp2) + " reszta:"+temp+"\n";

                double temp3 = Convert.ToDouble(temp) % 100; //reszta z 100
                double temp4 = Convert.ToDouble(temp) / 100; //liczba banknotow 100 zl

                if (Convert.ToDouble(a) >= 100)
                    label2.Text +="Liczba banknotow 100 zlotowych: " + Math.Round(temp4) + " reszta:" + temp3+"\n";

                double temp5 = Convert.ToDouble(temp3) % 50; //reszta z 50
                double temp6 = Convert.ToDouble(temp3) / 50; //liczba banknotow 50 zl

                if (Convert.ToDouble(a) >= 50)
                    label2.Text += "Liczba banknotow 50 zlotowych: " + Math.Round(temp6) + " reszta:" + temp5 + "\n";

            }
0

544 / 200 = 2.72 - taka wartość jest przechowywana w zmiennej temp2. Zaokrąglając otrzymujemy 3.

Do przechowywania ilości banknotów użyłbym int a nie double. Wynik dzielenia na 200 możesz później rzutować na int tak aby pozbyć się części dziesiętnej:

int temp2 = (int)(Convert.ToDouble(a) / 200);

1 użytkowników online, w tym zalogowanych: 0, gości: 1