Sådan afrundes tal i Python [With Examples]

Arbejder du med numeriske datatyper i Python? Gå op i niveau ved at lære de forskellige måder at afrunde tal på i Python.

De fleste datasæt fra den virkelige verden indeholder numeriske såvel som kategoriske funktioner. Der er en bred vifte af numeriske funktioner, fra sensoraflæsninger til valutakurser, biomedicinske signaler og mere.

Når du arbejder med numeriske værdier, skal du muligvis afrunde disse værdier til en fast præcision af årsager som:

  • Sikring af et ensartet format
  • Lettere opbevaring og behandling

I denne øvelse lærer vi de forskellige måder at afrunde et tal til en bestemt præcision, afrunde tal op og ned til nærmeste heltal og meget mere.

Lad os komme igang.

Sådan afrundes tal ved hjælp af den indbyggede round()-funktion

Den mest almindelige metode til at afrunde tal i Python er at bruge den indbyggede round() funktion. Lad os starte med at lære dens syntaks:

round(num, ndigits)

Her,

  • num er det tal, du vil afrunde
  • ndigits er en valgfri parameter med standardværdien Ingen. Det er antallet af steder, tallet skal afrundes til. Hvis ndigits = 2, afrundes num til to pladser efter decimalkommaet.
  • Funktionen round() returnerer tal afrundet til ncifre præcision efter decimalkommaet.

Python round() Eksempler på funktionsbrug

Lad os kode nogle eksempler for at forstå, hvordan round()-funktionen fungerer.

Som nævnt er ndigits valgfrit. Så når vi kalder round() med kun tallet, rundes tallet af til nærmeste heltal.

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

Lad os nu tage nogle eksempler, hvor vi specificerer præcisionen.

Med ncifre sat til 2, afrundes tal til to decimaler (tiende plads):

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

Med ncifre sat til 3 afrundes tal til tre decimaler (hundredeplads):

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

Du kan også bruge round() til at afrunde negative tal:

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

Her runder funktionen -3,4 til -3, det nærmeste heltal.

  Hvordan scanner man flere sider til én PDF-side?

Afrunding til nærmeste tiere og hundrede plads

Vidste du, at ndigits også kan tage negative værdier?

Ja, du kan kalde funktionen round() med negative værdier for ndigits. Når du gør det, sker afrundingen til venstre for decimaltegnet i stedet for til højre.

Hvad betyder det? Lad os se nogle eksempler.

Når vi sætter ndigits til -1, afrundes tallet til nærmeste tiere.

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

Og kalder man round()-funktionen med ndigits sat til -2, rundes tallet 77,123456 op til nærmeste hundrede, hvilket i dette tilfælde er 100,0.

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

Indtil videre ser round()-funktionen ud til at følge de generelle principper for afrunding, som vi har lært i skolematematik. Men det er ikke altid tilfældet.

Der er nogle begrænsninger med flydende komma tal. Så du kan se nogle uventede resultater ved afrunding. En anden interessant advarsel er bankmandens afrunding.

Hvad er Bankers afrunding?

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

>>> round(1.5)
2

Vi ser, at runde(1,5) returnerer 2 (som forventet). Så hvad skal round(2.5) returnere?

>>> round(2.5)
2

Interessant, ja? Både runde(1,5) og runde(2,5) giver 2. Men hvordan og hvorfor?

Internt fungerer den runde funktion sådan: enhver værdi, der er midt mellem to heltal, afrundes til nærmeste lige heltal. Dette kaldes bankmands afrunding eller den runde halvdel til lige strategi.

Vi ved, at round()-funktionen er tilstrækkelig til simple afrundingsopgaver. Men nogle gange skal du måske runde et tal op eller ned til det nærmeste heltal.

Så hvordan gør man det? Lad os lære det i næste afsnit.

Sådan rundes tal op i Python

For at runde et tal op til det nærmeste heltal kan du bruge:

  Sådan viser, skjuler eller ændrer du størrelse på diasminiaturer i PowerPoint

Brug af math.ceil

ceil()-funktionen (eller loft-funktionen) fungerer således: Den runder et tal op til det mindste heltal, der er større end tallet.

Følgende uddrag viser, hvordan du bruger funktionen ceil() til at runde tallet 3.2 op:

import math

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

Brug af decimalmodulet

Indtil videre har vi brugt den indbyggede flydende datatype. Men til visse applikationer inden for videnskabelig databehandling og finans har vi brug for meget højere præcision. Og til dette leveres Python med decimalmodulet, der giver:

  • Mere præcis flydende komma aritmetik
  • Pålidelig ligestillingstest
  • Finere kontrol over præcisionsniveauet (standardpræcisionen er 28 steder)

For at se den aktuelle kontekst, brug getcontext() som vist:

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

Du bør blandt andet kunne se den aktuelle præcisions- og afrundingstilstand:

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

For at runde et tal op, kan du bruge quantize() ved at angive:

  • Præcisionen (0,0 da vi ønsker at runde op til nærmeste heltal) og
  • Afrundingstilstanden: 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 op til nærmeste heltal 4.

Sådan afrundes tal i Python

Lad os nu se, hvordan man runder tal ned i Python. I lighed med afrundingsprocessen kan vi bruge enten matematik- eller decimalmodulerne.

Brug af math.floor

floor()-funktionen fra matematikmodulet fungerer således: Den runder et tal ned til det største heltal, der er mindre end tallet.

Lad os tage følgende eksempel:

import math

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

Her runder floor()-funktionen det flydende decimaltal 3,8 ned til 3.

Brug af decimalmodulet

For at afrunde et tal, kan du bruge quantize() ved at indstille afrundingstilstanden 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 det ses, er 3,8 blevet rundet ned til 3.

Almindelige faldgruber, der skal undgås ved afrunding af tal

Vi har allerede set, at funktionen round() runder halvt til lige, hvilket måske ikke altid er ønsket. Der er nogle andre almindelige faldgruber, man skal undgå, når man afrunder tal i Python:

  • Forkert lighedssammenligning: Afrundingstal introducerer ofte afrundingsfejl. Hvis du forsøger at udføre en lighedssammenligning mellem et afrundet resultat med en anden værdi, vil lighedskontrollen (næsten altid) mislykkes på grund af varierende præcision. Så prøv at undgå lighedstjek mellem flydende kommatal og afrundede flydende kommatal. Hvis sammenligningen er nødvendig, så indfør en tolerancetærskel.
  • Tab af information: Du vil måske have visse data som sensoraflæsninger ved forskellige tidsstempler optaget med høj præcision. Afrunding af sådanne data til færre decimaler resulterer i tab af information og forkert analyse.
  • Afrunding af mellemresultater: Du vil ofte have flere trin som en del af beregningen. Brug ensartet præcision på tværs af alle trin. Undgå også afrunding ved mellemliggende trin for at forhindre, at afrundingsfejlene sammensættes.
  Sådan konverteres OpenSUSE Leap til Tumbleweed

Bedste fremgangsmåder til at runde tal i Python

Lad os liste nogle bedste fremgangsmåder til at følge, når du afrunder tal i Python:

  • Vælg den rigtige datatype: Vælg mellem float- og decimaldatatyper afhængigt af applikationen. Hvis du har brug for at udføre flydende kommaaritmetik med høj præcision, skal du vælge decimaldatatype.
  • Brug ensartede præcisionsniveauer: Indstil ensartede præcisionsniveauer for decimaltal gennem hele programmet for at undgå uventede afrundingsfejl.
  • Dokumentafrundingsteknikker: I applikationer i den virkelige verden, der involverer data som valuta- og sensoraflæsninger, er det vigtigt at have en konsistent og dokumenteret afrundingsteknik på plads.

Afslutter

Lad os afslutte selvstudiet med en hurtig gennemgang af, hvad vi har lært:

  • Du kan bruge den indbyggede round() funktion med denne syntaks round(num, ndigits). Når du bruger round()-funktionen, skal du være opmærksom på bankmandens afrundingsstrategi. Så den runder tal nøjagtigt mellem to heltal til det nærmeste lige heltal.
  • Du kan bruge funktionerne ceil() og floor() fra matematikmodulet til henholdsvis at runde et givet tal op og ned til nærmeste heltal.
  • Når du skal udføre flydende kommaaritmetik med høj præcision, skal du bruge decimalmodulet. Du kan afrunde tal med den nødvendige præcision og afrundingsstrategi.
  • Du skal være opmærksom på almindelige faldgruber med afrunding af tal i Python. Disse omfatter tab af information fra afrunding, afrunding af resultater ved mellemliggende trin og brug af forskellig præcision i forskellige dele af koden.
  • Bedste praksis omfatter at vælge den rigtige datatype afhængigt af applikationen og dokumentere ensartede præcisionsniveauer.

Lær derefter, hvordan du udfører etagedeling i Python.

Var denne artikel til hjælp?

Tak for din feedback!