[C] Zamiana groszy na zlote

Artut97
Użytkownik
Użytkownik
Posty: 318
Rejestracja: 18 paź 2015, o 17:31
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 265 razy
Pomógł: 1 raz

[C] Zamiana groszy na zlote

Post autor: Artut97 »

Mam problem z zamianą groszy na złote, użytkownik podaje liczbę groszy np. \(\displaystyle{ 78}\), a gdy zrobię grosze/100.0 to nie wyjdzie \(\displaystyle{ 0,78}\) tylko jakieś dziwne przybliżenie tej liczby powiedzmy \(\displaystyle{ 0,7789994}\) i to przeszkadza mi w napisaniu programu.

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>

int main()
{
    int zloty;
    int grosze;
    int banknoty[5] = {200, 100, 50, 20, 10};
    float monety[9] = {5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
    int banknoty_liczba[5] = {0, 0, 0, 0, 0};
    int monety_liczba[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
    float reszta;
    float grosze2;



    printf("Podaj liczbe zlotych
");
    scanf("%d", &zloty);
    printf("Podaj liczbe groszy
");
    scanf("%d", &grosze);


    for(int i=0; i<5; i++)
    {
        banknoty_liczba[i] = zloty/banknoty[i];
        zloty = zloty -  banknoty_liczba[i]*banknoty[i];

        if(zloty==0)
            break;
    }

    reszta = zloty + grosze/100.0;

    for(int i=0; i<9; i++)
    {
        monety_liczba[i]=reszta/monety[i];
        reszta=reszta-monety_liczba[i]*monety[i];
    }

    printf("Banknoty:
");

    for(int i=0; i<5; i++)
    {
        if(banknoty_liczba[i]>0)
            printf("%d x %d zl
", banknoty_liczba[i], banknoty[i] );

    }

    printf("Monety:
");

    for(int i=0; i<9; i++)
    {
        if(monety_liczba[i]>0)
        {
            if(monety[i] >= 1)
                printf("%d x %.0f zl
", monety_liczba[i], monety[i]);
            else
                printf("%d x %.0f gr
", monety_liczba[i], monety[i]*100);
        }
    }


    return 0;
}
Ostatnio zmieniony 14 gru 2016, o 21:24 przez Jan Kraszewski, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Zamiana groszy na zlote

Post autor: kalwi »

Obliczeń na finansach nie robi się na typie zmiennoprzecinkowym.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10227
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2362 razy

[C] Zamiana groszy na zlote

Post autor: Dasio11 »

To jak w takim razie policzyć, ile pieniędzy będzie miał po roku klient, który wpłacił \(\displaystyle{ 523{,}46 \text{zł}}\) na konto z oprocentowaniem \(\displaystyle{ 0{,}75 \%}\) i kapitalizacją miesięczną?
athame
Użytkownik
Użytkownik
Posty: 576
Rejestracja: 2 lut 2012, o 21:42
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 1 raz
Pomógł: 64 razy

[C] Zamiana groszy na zlote

Post autor: athame »

Na liczbach całkowitych, z translacją ostatecznego wyniku na liczbę rzeczywistą.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10227
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2362 razy

[C] Zamiana groszy na zlote

Post autor: Dasio11 »

Jak?

Początkową kwotę ostatecznie można trzymać w groszach. Ale nie widzę, żeby dało się reprezentować oprocentowanie albo kwotę po doliczeniu odsetek w intach.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Zamiana groszy na zlote

Post autor: kalwi »

Są do tego biblioteki, np.:

Kod: Zaznacz cały

https://github.com/vpiotr/decimal_for_cpp
ODPOWIEDZ