No więc chcę napisać program na wydawanie reszty w walucie PL . Pierwszy krokiem w moim programie jest podanie kwoty i zamienie ją na zł i na gr . I już jest problem…
Zł i gr są w int więc program sam konwertuje gdzie trzeba .Chodzi o to ze w niektórych przypadkach np . 2.06 wychodzi mi 2 zł i 5 grosze … Powód tego jest taki ze 0.06 * 100 = 5.99999 … Niby czemu ? Jak temu zaradzić ?
Liczby zmiennoprzecinkowe mają ograniczoną dokładność, poza tym są kodowane dwójkowo, nie da się precyzyjnie wyrazić w nich każdej wartości dziesiętnej. http://gynvael.coldwind.pl/?id=374
Kwoty przechowuj jako całkowitą liczbę groszy (albo ich części jeśli potrzebujesz ułamków groszy), np. 1000 to 10 zł.
Twój kod jest prawie tym samym z tym że rzutowanie jest wpisane tam gdzie kompilator sam by sobie przerzucił . No i double coś zmienia ale poprostu błąd jest w innych przypadkach .
Użyłem funkcji do przybliżenia(na zasadzie błędu przybliżenia) I działa prawidłowo ale jestem załamany że taka prosta operacja wymaga takie komplikacji kodu i czytelności : /