Új hozzászólás Aktív témák

  • kovisoft

    őstag

    válasz mylastage #2912 üzenetére

    A sokadik tizedesjegynél való eltérés azért adódik, mert amikor nem egész számokkal dolgozik a számítógép, akkor lebegőpontosan tárolja azokat, kettedes tört formájában, és vannak véges tizedes törtek, amik csak végtelen kettedes törtként ábrázolhatóak (hasonlóan ahhoz, mint ahogy az 1/3-ot csak végtelen 0.33333... formájában tudjuk tizedes törtként ábrázolni, harmados törtként meg ez a 0.1), ezért óhatatlanul kerekítve lesznek. Ha egy ilyen végtelen kettedes törtet utána visszaalakítjuk tizedes törtté, akkor lesz ez a pici eltérés a tároláskori kerekítés miatt.

    Ezért szokás a pénzügyi rendszereknél, ahol 1 fillér vagy cent sem térhet el, hogy egész számokkal dolgozunk, pl. mindent fillérben, egész számként tárolunk és számolunk, a számítások eredményét is egészre kerekítjük, kiírásnál pedig a 100-zal való osztás hányadosát és maradékát írjuk ki.

    De én kipróbáltam a programodat egy round() beiktatásával, és nem látom, hogy hol adna rossz eredményt:

    > while (szamlalo < 21):
    ...     cad = round(arfolyam_eurtocad * szamlalo, 2)
    ...     print (szamlalo, " EUR = ", cad, " CAD ")
    ...     szamlalo = szamlalo + 1
    ...
    1  EUR =  1.57  CAD
    2  EUR =  3.14  CAD
    3  EUR =  4.71  CAD
    4  EUR =  6.28  CAD
    5  EUR =  7.85  CAD
    6  EUR =  9.42  CAD
    7  EUR =  10.99  CAD
    8  EUR =  12.56  CAD
    9  EUR =  14.13  CAD
    10  EUR =  15.7  CAD
    11  EUR =  17.27  CAD
    12  EUR =  18.84  CAD
    13  EUR =  20.41  CAD
    14  EUR =  21.98  CAD
    15  EUR =  23.55  CAD
    16  EUR =  25.12  CAD
    17  EUR =  26.69  CAD
    18  EUR =  28.26  CAD
    19  EUR =  29.83  CAD
    20  EUR =  31.4  CAD

    [ Szerkesztve ]

Új hozzászólás Aktív témák