Python-oppimateriaali (CHEM-A2600)
Lukuarvojen pyöristäminen (round)
Edellisessä luvussa opeteltiin lukemaan lukuarvoja input-funktiolla:
luku = float(input("Anna luku niin kerron sen numerolla 2.6\n")) print("Antamasi luku", luku, "kerrottuna numerolla 2.6 on", 2.6 * luku)
Tarkastellaan, mitä tämä koodi tulostaa, kun annamme syötteeksi liukuluvun 3.0:
Anna luku niin kerron sen numerolla 2.6 3.0 Antamasi luku 3.0 kerrottuna numerolla 2.6 on 7.800000000000001
Miksi koodi tulostaa 7.800000000000001 eikä 7.8? Tämä johtuu tavasta, jolla tietokoneet käsittelevät liukulukuja (lisätietoa aiheesta kiinnostuneille Python-tutoriaalissa). Luonnollisesti meille riittäisi tässä tapauksessa yhden desimaalin tarkkuus. Tutustutaan seuraavaksi pyöristysfunktioon round.
round-funktio
Kokonaisluvun (int) muuntaminen liukuluvuksi (float) on yksinkertaista. Muunnetaan kokonaisluku 5 liukuluvuksi ja tulostetaan se:
print(float(5))
tulostaa
5.0
Mutta liukulukujen muuntamisessa kokonaisluvuiksi tulee olla tarkkana:
print(int(5.1)) print(int(5.9))
tulostaa
5 5
Liukuluvun suora muunnos int-funktiolla siis katkaisee liukuluvun desimaalipisteen kohdalta. Liukuluvun voi pyöristää lähimpään kokonaislukuun round-funktiolla:
print(round(5.1)) print(round(5.9))
tulostaa
5 6
Liukulukuja voi myös pyöristää haluttuun tarkkuuteen. round-funktion toinen parametri kertoo käytettävien desimaalien määrän:
print(round(5.666, 1)) print(round(5.666, 2))
tulostaa
5.7 5.67
round-funktiota voi siis hyödyntää, kun ilmoitamme liukulukulaskujen tuloksia käyttäjälle. Kierroksen 2 materiaalissa kerrotaan tutustumme muotoiltujen merkkijonojen tulostamiseen f-merkkijonoilla tai str.format-funktiolla. Niiden avulla liukulukujen pyöristäminen tulostamista varten on hyvin helppoa.
Huom! Älä koskaan pyöristä liukulukuja laskutoimitusten aikana! Liukuluvuilla työskennellään aina mahdollisimman suurella tarkkuudella ja ainoastaan käyttäjälle ilmoitettava luku pyöristetään johonkin ihmissilmälle sopivampaan tarkkuuteen. Ilmoitustarkkuuteen pätevät tässä samat säännöt kuin normaalistikin, eli tuloksen ilmoitustarkkuus riippuu esim. lähtöarvojen tarkkuudesta.
Lisätietoa: Kokonaislukujen pyöristäminen round-funktiolla
round-funktiolla on myös vähemmän tunnettu ominaisuus, jonka avulla voi helposti pyöristää lukuja haluttuun ilmoitustarkkuuteen myös desimaalipisteen vasemmalta puolen. Tätä ominaisuutta tarvitaan usein luonnontieteissä, kun mittaustarkkuus rajoittaa vastauksen tarkkuutta. Tällöin funktion toinen parametri annetaan negatiivisena:
print(round(5624, -3)) # tarkkuus: 10^3 print(round(5624, -2)) # tarkkuus: 10^2 print(round(5624, -1)) # tarkkuus: 10^1
tulostaa
6000 5600 5620
Tässä esimerkissä pyöristettiin siis kokonaislukuja haluttuun tarkkuuteen. Eli round-funktion toinen parametri ndigits tarkoittaa sekä positiivisten että negatiivisten lukujen kohdalla "pyöristä tarkkuuteen 10-ndigits".