Hvordan runde tall i Python [With Examples]

Jobber du med numeriske datatyper i Python? Opp på nivå ved å lære de forskjellige måtene å avrunde tall i Python.

De fleste virkelige datasett inneholder numeriske så vel som kategoriske funksjoner. Det finnes et bredt utvalg av numeriske funksjoner, fra sensoravlesninger til valutakurser, biomedisinske signaler og mer.

Når du arbeider med numeriske verdier, må du kanskje avrunde disse verdiene til en fast presisjon av grunner som:

  • Sikre et konsistent format
  • Enklere lagring og behandling

I denne opplæringen lærer vi de forskjellige måtene å runde av et tall til en bestemt presisjon, runde opp og ned tall til nærmeste heltall og mye mer.

La oss komme i gang.

Hvordan avrunde tall ved hjelp av den innebygde round()-funksjonen

Den vanligste metoden for å avrunde tall i Python er å bruke den innebygde round() funksjon. La oss begynne med å lære syntaksen:

round(num, ndigits)

Her,

  • num er tallet du vil runde av
  • ndigits er en valgfri parameter med standardverdien Ingen. Det er antall steder å avrunde tallet til. Hvis ndigits = 2, rundes num av til to steder etter desimaltegnet.
  • round()-funksjonen returnerer tall avrundet til ndigits presisjon etter desimaltegnet.

Python round() Eksempler på funksjonsbruk

La oss kode noen eksempler for å forstå hvordan round()-funksjonen fungerer.

Som nevnt er ndigits valgfritt. Så når vi kaller round() med bare tallet, rundes tallet av til nærmeste heltall.

number = 7.123456
rounded = round(number)  
print(rounded)
# Output: 7

La oss nå ta noen eksempler der vi spesifiserer presisjonen.

Med ndigits satt til 2, avrundes tallet til to desimaler (tiende plass):

number = 7.123456
rounded = round(number, 2)  
print(rounded)
# Output: 7.12

Med ndigits satt til 3, avrundes tallet til tre desimaler (hundreplass):

number = 7.123456
rounded = round(number, 3)  
print(rounded)
# Output: 7.123

Du kan bruke round() for å runde av negative tall også:

number = -3.4
rounded = round(number)
print(rounded) 
# Output: -3

Her runder funksjonen -3,4 til -3, det nærmeste heltall.

  Slik sletter du kontakter på iPhone

Avrunding til nærmeste tier og hundre plass

Visste du at ndigits også kan ta negative verdier?

Ja, du kan kalle round()-funksjonen med negative verdier for ndigits. Når du gjør det, skjer avrundingen til venstre for desimaltegn i stedet for til høyre.

Hva betyr dette? La oss se noen eksempler.

Når vi setter ndigits til -1, rundes tallet av til nærmeste tiere.

number = 7.123456
rounded = round(number, -1)  
print(rounded)
# Output: 10.0

Og å kalle round()-funksjonen med ndigits satt til -2 runder opp tallet 77,123456 til nærmeste hundre, som i dette tilfellet er 100,0.

number = 77.123456
rounded = round(number, -2)  
print(rounded)
# Output: 100.0

Så langt ser det ut til at round()-funksjonen følger de generelle prinsippene for avrunding som vi har lært i skolematte. Men det er ikke alltid tilfelle.

Det er noen begrensninger med flyttall tall. Så du kan se noen uventede resultater ved avrunding. Et annet interessant forbehold er bankmannens avrunding.

Hva er Bankers avrunding?

Start en Python REPL og prøv følgende eksempel:

>>> round(1.5)
2

Vi ser at runde(1.5) gir 2 (som forventet). Så hva skal round(2.5) returnere?

>>> round(2.5)
2

Interessant, ja? Både runde(1.5) og runde(2.5) gir 2. Men hvordan og hvorfor?

Internt fungerer den runde funksjonen slik: enhver verdi som er midt mellom to heltall rundes av til nærmeste partall. Dette kalles bankers avrunding eller den runde halvdelen til jevn strategi.

Vi vet at round()-funksjonen er tilstrekkelig for enkle avrundingsoppgaver. Men noen ganger må du kanskje runde opp eller ned et tall til nærmeste heltall.

Så hvordan gjør du det? La oss lære det i neste avsnitt.

  Slik holder du kameralinsene rene

Hvordan runde opp tall i Python

For å runde opp et tall til nærmeste heltall kan du bruke:

Bruker math.ceil

ceil()-funksjonen (eller takfunksjonen) fungerer slik: Den runder opp et tall til det minste heltall som er større enn tallet.

Følgende utdrag viser hvordan du bruker funksjonen ceil() for å runde opp tallet 3.2:

import math

number = 3.2
rounded_up = math.ceil(number)
print(rounded_up)  
# Output: 4

Bruke desimalmodulen

Så langt har vi brukt den innebygde flytedatatypen. Men for visse bruksområder innen vitenskapelig databehandling og finans trenger vi mye høyere presisjon. Og for dette leveres Python med desimalmodulen som gir:

  • Mer presis flytepunktaritmetikk
  • Pålitelig likestillingstesting
  • Finere kontroll over presisjonsnivået (standardpresisjonen er 28 plasser)

For å se gjeldende kontekst, bruk getcontext() som vist:

from decimal import getcontext
current_context = getcontext()
print(current_context)

Du bør blant annet kunne se gjeldende presisjons- og avrundingsmodus:

# Output
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, 
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

For å runde opp et tall kan du bruke quantize() ved å spesifisere:

  • Presisjonen (0,0 siden vi ønsker å runde opp til nærmeste heltall) og
  • Avrundingsmodus: ROUND_CEILING
from decimal import Decimal, ROUND_CEILING

number = Decimal('3.2')
rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(rounded_up)  
# Output: 4

Her er tallet 3,2 rundet opp til nærmeste heltall 4.

Hvordan runde ned tall i Python

La oss nå se hvordan du runder ned tall i Python. I likhet med avrundingsprosessen kan vi bruke enten matematikk- eller desimalmodulene.

Bruker math.floor

floor()-funksjonen fra matematikkmodulen fungerer slik: Den runder ned et tall til det største heltall som er mindre enn tallet.

La oss ta følgende eksempel:

import math

number = 3.8
rounded_down = math.floor(number)
print(rounded_down)  
# Output: 3

Her runder floor()-funksjonen ned flytepunktet 3,8 til 3.

Bruke desimalmodulen

For å runde ned et tall, kan du bruke quantize() ved å sette avrundingsmodusen til ROUND_FLOOR.

from decimal import Decimal, ROUND_FLOOR

number = Decimal('3.8')
rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(rounded_down)  
# Output: 3

Som sett er 3,8 rundet ned til 3.

Vanlige fallgruver å unngå ved avrunding av tall

Vi har allerede sett at round()-funksjonen runder halvt til jevnt, noe som kanskje ikke alltid er ønsket. Det er noen andre vanlige fallgruver å unngå når du avrunder tall i Python:

  • Feil likhetssammenligning: Avrundingstall introduserer ofte avrundingsfeil. Hvis du prøver å utføre en likhetssammenligning mellom et avrundet resultat med en annen verdi, vil likhetskontrollen (nesten alltid) mislykkes på grunn av varierende presisjon. Så prøv å unngå likhetskontroller mellom flyttall og avrundede flyttall. Hvis sammenligningen er nødvendig, introduser en toleranseterskel.
  • Tap av informasjon: Du vil kanskje ha visse data som sensoravlesninger ved forskjellige tidsstempler fanget med høy presisjon. Avrunding av slike data til færre desimaler resulterer i tap av informasjon og feil analyse.
  • Avrunding av mellomresultater: Du vil ofte ha flere trinn som en del av beregningen. Bruk konsekvent presisjon på tvers av alle trinnene. Unngå også avrunding ved mellomtrinn for å forhindre at avrundingsfeilene blir sammensatte.
  Hvordan fikse denne nettsiden er ikke tilgjengelig feil

Beste praksis for å runde tall i Python

La oss liste noen beste fremgangsmåter å følge når du avrunder tall i Python:

  • Velg riktig datatype: Velg mellom flytende og desimaldatatyper avhengig av applikasjonen. Hvis du trenger å utføre flytepunktaritmetikk med høy presisjon, velg desimaldatatype.
  • Bruk konsistente presisjonsnivåer: Angi konsistente presisjonsnivåer for desimaltall gjennom hele programmet for å unngå uventede avrundingsfeil.
  • Dokumentavrundingsteknikker: I virkelige applikasjoner som involverer data som valuta- og sensoravlesninger er det viktig å ha en konsistent og dokumentert avrundingsteknikk på plass.

Innpakning

La oss avslutte veiledningen med en rask gjennomgang av det vi har lært:

  • Du kan bruke den innebygde round()-funksjonen med denne syntaksen round(num, ndigits). Når du bruker round()-funksjonen, bør du være klar over bankens avrundingsstrategi. Så den runder tall nøyaktig mellom to heltall til nærmeste partall.
  • Du kan bruke funksjonene ceil() og floor() fra matematikkmodulen til å runde henholdsvis opp og ned et gitt tall til nærmeste heltall.
  • Når du trenger å utføre flytende kommaaritmetikk med høy presisjon, bruk desimalmodulen. Du kan avrunde tall med nødvendig presisjon og avrundingsstrategi.
  • Du bør være oppmerksom på vanlige fallgruver med avrunding av tall i Python. Disse inkluderer tap av informasjon fra avrunding, avrunding av resultater ved mellomtrinn og bruk av ulik presisjon i ulike deler av koden.
  • Beste praksis inkluderer å velge riktig datatype avhengig av applikasjonen og dokumentere konsistente presisjonsnivåer.

Deretter lærer du hvordan du utfører etasjedeling i Python.

Var denne artikkelen til hjelp?

Takk for din tilbakemelding!