Pythoni ümardamisfunktsioonid: round(), decimal ja praktilised näited

1. Pythoni round() funktsiooni põhitõed

round() funktsiooni ülevaade

Pythonis on round() funktsioon põhiline tööriist arvude ümardamiseks. Seda kasutatakse peamiselt selleks, et määrata, mitu kohta pärast koma tuleks number ümardada. See võimaldab andmete kuvamist või arvutustulemusi lihtsalt kohandada.

Põhisüntaks

round(number[, ndigits])
  • number: Ümardatav arv.
  • ndigits: Kohtade arv pärast koma (valikuline). Kui see jäetakse määramata, ümardatakse täisarvuni.

Näited kasutamisest

print(round(3.14159))    # Tulemus: 3
print(round(3.14159, 2)) # Tulemus: 3.14
print(round(1.5))        # Tulemus: 2

Nagu näha, saab round() funktsiooniga ümardada soovitud komakohani, ja kui ndigits pole määratud, ümardatakse täisarvuni.

2. Pythonis ümardamise meetod: “panganduslik ümardamine”

Mis on panganduslik ümardamine?

Pythonis kasutab round() funktsioon “panganduslikku ümardamist” (Banker’s Rounding). See tähendab, et kui komakoht on täpselt 0.5, ümardatakse lähima paarisarvuni. Näiteks 2.5 ümardatakse 2-ks ja 3.5 ümardatakse 4-ks. Seda meetodit kasutatakse statistikas ja finantsarvutustes, et vältida andmete kallutatust.

Pangandusliku ümardamise näited

print(round(2.5))  # Tulemus: 2
print(round(3.5))  # Tulemus: 4

Nagu näha, kui komakoht on 0.5, ümardatakse alati paarisarvuni, mis aitab vältida kumulatiivseid vigu.

Pangandusliku ümardamise eelised

See meetod aitab vähendada lihtsa üles- või allapoole ümardamisega tekkivaid kumulatiivseid vigu. Eriti kasulik on see suurte andmekogumite töötlemisel, et hoida üldine tasakaal.

3. Ujukomaarvude probleemid

Ujukomaarvude sisemine esitus ja vead

Pythonis esitatakse ujukomaarve kahendsüsteemis. Selle tõttu ei pruugi kümnendsüsteemi arvud olla täpselt esitatavad, ning ümardamisel võib tekkida ootamatuid tulemusi. Eriti, kui arv ei ole sisemiselt täpselt esitatav, võib round() funktsiooni tulemus olla ootamatu.

Ujukomaarvude probleemide näide

n = 3.15
print(round(n, 1))  # Tulemus: 3.1 (oodatud oleks 3.2)

Selles näites esitatakse 3.15 sisemiselt kui 3.149999..., mistõttu tulemus ei vasta ootustele. See tuleneb ujukomaarvude piirangutest.

Miks tekivad ujukomaarvude vead?

Ujukomaarvud esitatakse kahendsüsteemis ja sellised arvud nagu 1.15 või 3.15 ei ole täpselt esitatavad. Seetõttu võivad ümardamisel tekkida vead. Nende probleemide vältimiseks on soovitatav kasutada suure täpsusega arvutusi, näiteks decimal mooduli abil, millest räägitakse järgmises osas.

4. Täpsuse tagamine decimal mooduliga

decimal mooduli ülevaade

decimal mooduli kasutamine võimaldab vältida ujukomaarvude vigu ja teha kõrge täpsusega arvutusi. See on eriti kasulik finants- ja teadusarvutustes, kus on vaja täpseid tulemusi.

Näide kasutamisest

from decimal import Decimal, ROUND_HALF_UP
n = Decimal('3.15')
print(n.quantize(Decimal('0.1'), rounding=ROUND_HALF_UP))  # Tulemus: 3.2

Decimal klassi kasutatakse ujukomavea vältimiseks ja täpsete arvutuste tegemiseks. ROUND_HALF_UP käitub nagu tavapärane ümardamine.

Muud ümardamise režiimid

decimal moodulil on mitmeid ümardamisrežiime. Näiteks:

  • ROUND_DOWN: Alati ümardab allapoole.
  • ROUND_CEILING: Positiivsed arvud ümardatakse üles, negatiivsed arvud alla.
  • ROUND_FLOOR: Alati ümardab alla (ka negatiivsed arvud).

Nende režiimidega on võimalik paindlikult valida sobiv ümardamisviis vastavalt kasutusvaldkonnale.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. Muud ümardamise viisid: math.floor() ja math.ceil()

math.floor(): Allapoole ümardamine

math.floor() funktsioon ümardab väärtuse alati lähima väiksema täisarvuni. Negatiivsete arvude puhul ümardatakse samuti allapoole.

import math
print(math.floor(3.9))  # Tulemus: 3

math.ceil(): Ülespoole ümardamine

math.ceil() funktsioon ümardab alati ülespoole.

import math
print(math.ceil(3.1))   # Tulemus: 4

Erinevused round() funktsiooniga

round() ümardab lähima täisarvuni, kuid math.floor() ja math.ceil() funktsioonid ümardavad alati kindlas suunas, mis teeb tulemused etteaimatavaks. Kui on vaja korrektselt ümardada negatiivseid arve, võivad need funktsioonid olla kasulikud.

6. Praktilised kasutusnäited

Rakendused valuutaarvutustes

Valuutaarvutustes on vaja kõrge täpsusega tulemusi. Näiteks kogusummade või allahindluste arvutamisel aitab decimal moodul leida täpse väärtuse.

from decimal import Decimal, ROUND_HALF_UP
price = Decimal('19.995')
print(price.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))  # Tulemus: 20.00

Rakendused teaduslikes arvutustes

Teaduslikes arvutustes võivad ujukomaarvude vead olla probleemiks, seega on decimal mooduli kasutamine täpsete arvutuste tegemiseks oluline. See aitab mõõtetulemusi ja eksperimentaalseid andmeid täpselt esitada.

Rakendused andmeanalüüsis

Andmeanalüüsis on samuti oluline, et numbreid ümardatakse õigesti, et vältida vigade kuhjumist. Statistiliste või suurte andmekogumite töötlemisel aitavad decimal ja round() täpset tulemust saada.

7. Kokkuvõte

Pythonis on round() funktsioon mugav tööriist komakohtade ümardamiseks, kuid ujukomaarvude täpsuse osas tuleb olla tähelepanelik. Kui on vaja täpset tulemust, näiteks finants- või teadusarvutustes, tuleks kasutada decimal moodulit. Samuti tasub mõista ja kasutada math.floor() ja math.ceil() funktsioone, et valida vastavalt vajadusele kõige sobivam ümardamisviis.