Ú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  EUR1.57  CAD
    2  EUR3.14  CAD
    3  EUR4.71  CAD
    4  EUR6.28  CAD
    5  EUR7.85  CAD
    6  EUR9.42  CAD
    7  EUR10.99  CAD
    8  EUR12.56  CAD
    9  EUR14.13  CAD
    10  EUR15.7  CAD
    11  EUR17.27  CAD
    12  EUR18.84  CAD
    13  EUR20.41  CAD
    14  EUR21.98  CAD
    15  EUR23.55  CAD
    16  EUR25.12  CAD
    17  EUR26.69  CAD
    18  EUR28.26  CAD
    19  EUR29.83  CAD
    20  EUR31.4  CAD

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