Python round()-funktion med EKSEMPLER

โšก Smart opsummering

Python round() er en indbygget funktion, der returnerer en flydende komma- eller heltalsvรฆrdi afrundet til et bestemt antal decimaler. Funktionen bruger bankers afrunding til at bryde bรฅnd til det nรฆrmeste lige ciffer.

  • ๐Ÿ”˜ Syntaks: round(number, ndigits) accepterer den vรฆrdi, der skal afrundes, og et valgfrit cifferantal, der som standard er nul.
  • โ˜‘๏ธ Returtype: Udeladelse af ndigits returnerer et heltal, mens angivelse af det returnerer et flydende tal.
  • โœ… Bankens afrunding: Halvvejsvรฆrdier afrunder til nรฆrmeste lige tal, sรฅ round(2.5) returnerer 2.
  • ๐Ÿงช Negative tal: Afrunding gรฆlder ogsรฅ for negative tal, hvor -2.8 flyttes til -3 og -1.5 til -2.
  • ๐Ÿ› ๏ธ Prรฆcisionsvรฆrktรธjer: Decimalmodulet og NumPy round() hรฅndterer afrunding med fast prรฆcision og array-afrunding.
  • ๐Ÿค– AI-arbejdsgange: Maskinlรฆringskode afrunder metrikker, sandsynligheder og vรฆgte for renere logfรธring og rapporter.

Python round() Funktion

Hvad er round()-funktionen i Python?

Python round() er en indbygget funktion, der er tilgรฆngelig med PythonDen vil returnere dig et flydende tal, der afrundes til decimaler, der er angivet som input.

Hvis de decimaler, der skal afrundes, ikke er angivet, betragtes det som 0, og det vil afrunde til nรฆrmeste heltal.

Syntaks

round(float_num, num_of_decimals)

Driftsparametre

  • flydende_nummer: Det flydende tal, der skal afrundes.
  • antal_decimaler: (valgfrit) Antallet af decimaler, der skal tages i betragtning ved afrunding. Det er valgfrit, og hvis ikke angivet, er standardvรฆrdien 0, og afrundingen udfรธres til nรฆrmeste heltal.

Beskrivelse

Metoden round() tager to argumenter:

  • det tal, der skal afrundes, og
  • de decimaler, den skal tage i betragtning ved afrunding.

Det andet argument er valgfrit og har som standard en vรฆrdi pรฅ 0, nรฅr det ikke er angivet. I sรฅ fald afrunder det til nรฆrmeste heltal, og returtypen vil ogsรฅ vรฆre et heltal.

Nรฅr decimalerne, dvs. det andet argument, er til stede, afrundes det til det angivne antal pladser. Returtypen vil vรฆre en flyder.

Hvis tallet efter decimalen er:

  • >= 5, sรฅ lรฆgges + 1 til den endelige vรฆrdi.
  • < 5, sรฅ returneres den endelige vรฆrdi som den er, op til de nรฆvnte decimaler.

Returvรฆrdi

Den returnerer en heltalsvรฆrdi, hvis num_of_decimals ikke er angivet, og en flydende vรฆrdi, hvis num_of_decimals er angivet. Bemรฆrk venligst, at vรฆrdien afrundes til +1, hvis vรฆrdien efter decimaltegnet er >= 5, ellers returneres vรฆrdien, som den er, op til de nรฆvnte decimaler.

Hvor stor indflydelse kan afrunding have? (Afrunding vs trunkering)

Det bedste eksempel pรฅ afrundingens indflydelse er bรธrsmarkedet. Tidligere, dvs. i รฅr 1982, Vancouver bรธrs (VSE) bruges til at afkorte aktievรฆrdierne til tre decimaler ved hver handel.

Det blev gjort nรฆsten 3000 gange hver dag. De akkumulerede afkortninger fรธrte til et tab pรฅ omkring 25 point om mรฅneden.

Et eksempel pรฅ trunkering af vรฆrdierne i forhold til afrunding er vist nedenfor.

Betragt de flydende kommatal, der genereres nedenfor, som standardvรฆrdier. Lige nu genererer jeg dem for et interval pรฅ 1,000,000 sekunder mellem 0.01 og 0.05.

eksempler:

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]

For at vise effekten af โ€‹โ€‹afrunding har jeg skrevet et lille stykke kode, hvor man i starten bruger tallene op til kun 3 decimaler, dvs. afkorter tallet efter 3 decimaler.

Jeg har den oprindelige samlede vรฆrdi, summen fra de afkortede vรฆrdier, og forskellen mellem den oprindelige og den afkortede vรฆrdi.

Pรฅ det samme sรฆt tal har jeg brugt round()-metoden op til 3 decimaler og beregnet summen og forskellen mellem den oprindelige vรฆrdi og den afrundede vรฆrdi.

Her er eksemplet og outputtet.

Eksempel 1

import random

def truncate(num):
    return int(num * 1000) / 1000

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
sum_num = 0
sum_truncate = 0
for i in arr:
    sum_num = sum_num + i  
    sum_truncate = truncate(sum_truncate + i)
  
print("Testing by using truncating upto 3 decimal places")
print("The original sum is = ", sum_num)
print("The total using truncate = ", sum_truncate)
print("The difference from original - truncate = ", sum_num - sum_truncate)

print("\n\n")
print("Testing by using round() upto 3 decimal places")
sum_num1 = 0
sum_truncate1 = 0
for i in arr:
    sum_num1 = sum_num1 + i  
    sum_truncate1 = round(sum_truncate1 + i, 3)

print("The original sum is =", sum_num1)
print("The total using round = ", sum_truncate1)
print("The difference from original - round =", sum_num1 - sum_truncate1)

Output:

Testing by using truncating upto 3 decimal places
The original sum is =  29985.958619386867
The total using truncate =  29486.057
The difference from original - truncate =  499.9016193868665

Testing by using round() up to 3 decimal places
The original sum is = 29985.958619386867
The total using round =  29985.912
The difference from original - round = 0.04661938686695066

Forskellen mellem den oprindelige og den afkortede vรฆrdi er 499.9016193868665, og fra round() er den 0.04661938686695066.

Forskellen synes at vรฆre meget stor, og eksemplet viser, hvordan round()-metoden hjรฆlper med at beregne tรฆt pรฅ nรธjagtighed.

Eksempel: Rounding Float Numbers

I dette program vil vi se, hvordan afrunding fungerer pรฅ flydende tal.

# testing round()

float_num1 = 10.60 # here the value will be rounded to 11 as after the decimal point the number is 6 that is >5

float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5

float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5

float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5

print("The rounded value without num_of_decimals is :", round(float_num1))
print("The rounded value without num_of_decimals is :", round(float_num2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num3, 2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num4, 2))

Output:

The rounded value without num_of_decimals is : 11
The rounded value without num_of_decimals is : 10
The rounded value with num_of_decimals as 2 is : 10.35
The rounded value with num_of_decimals as 2 is : 10.34

Eksempel: Afrunding af heltalsvรฆrdier

Hvis du tilfรฆldigvis bruger round() pรฅ en heltalsvรฆrdi, vil det bare returnere dig tallet uden รฆndringer.

# testing round() on a integer

num = 15

print("The output is", round(num))

Output:

The output is 15

Eksempel: Afrunding pรฅ negativ Numbers

Lad os se et par eksempler pรฅ, hvordan afrunding fungerer pรฅ negative tal.

# testing round()

num = -2.8
num1 = -1.5
print("The value after rounding is", round(num))
print("The value after rounding is", round(num1))

Output:

C:\pythontest>python testround.py
The value after rounding is -3
The value after rounding is -2

Eksempel: Runde NumPy-arrays

Hvordan afrunder man NumPy arrays i Python?

For at lรธse dette kan vi bruge NumPy-modulet og bruge metoden numpy.round() eller numpy.around(), som vist i eksemplet nedenfor.

Brug af numpy.round()

# testing round()
import numpy as np

arr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323]

arr1 = np.round(arr, 2)

print(arr1)

Output:

C:\pythontest>python testround.py
[-0.34  1.46  4.23 -0.34  7.63  5.12]

Vi kan ogsรฅ bruge numpy.around(), som giver dig det samme resultat som numpy.round() vist ovenfor.

Eksempel: Decimalmodul

Udover round()-funktionen, Python har et decimalmodul, der hjรฆlper med at hรฅndtere decimaltal mere prรฆcist.

Decimalmodulet leveres med afrundingstyper, som vist nedenfor:

  • RUNDT_LOFT: den vil runde mod Uendeligheden.
  • ROUND_DOWN: den vil runde vรฆrdien af โ€‹โ€‹mod nul.
  • RUNDT_GULV: den vil runde mod -uendeligheden.
  • RUND_HALV_NED: Den vil runde af til den nรฆrmeste vรฆrdi mod nul.
  • RUND_HALV_LIGE: Den afrunder til nรฆrmeste vรฆrdi og gรฅr videre til nรฆrmeste lige heltal.
  • RUND_HALV_OP: Den afrunder til den nรฆrmeste vรฆrdi vรฆk fra nul.
  • RUND OP: Den vil runde af, hvor vรฆrdien gรฅr vรฆk fra nul.

I decimal hjรฆlper quantize()-metoden med at afrunde til et fast antal decimaler, og du kan angive den afrunding, der skal bruges, som vist i eksemplet nedenfor.

Eksempel: Brug af round() og decimalmetoder

import  decimal
round_num = 15.456

final_val = round(round_num, 2)

#Using decimal module
final_val1 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_CEILING)
final_val2 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_DOWN)
final_val3 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_FLOOR)
final_val4 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_DOWN)
final_val5 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_EVEN)
final_val6 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP)
final_val7 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP)

print("Using round()", final_val)
print("Using Decimal - ROUND_CEILING ",final_val1)
print("Using Decimal - ROUND_DOWN ",final_val2)
print("Using Decimal - ROUND_FLOOR ",final_val3)
print("Using Decimal - ROUND_HALF_DOWN ",final_val4)
print("Using Decimal - ROUND_HALF_EVEN ",final_val5)
print("Using Decimal - ROUND_HALF_UP ",final_val6)
print("Using Decimal - ROUND_UP ",final_val7)

Output:

Using round() 15.46
Using Decimal - ROUND_CEILING  15.46
Using Decimal - ROUND_DOWN  15.45
Using Decimal - ROUND_FLOOR  15.45
Using Decimal - ROUND_HALF_DOWN  15.46
Using Decimal - ROUND_HALF_EVEN  15.46
Using Decimal - ROUND_HALF_UP  15.46
Using Decimal - ROUND_UP  15.46

Ofte Stillede Spรธrgsmรฅl

Nej. Python 3 bruger afrunding fra halvdelen til lige (bankens afrunding) for uafgjort, sรฅ afrunding(0.5) er 0, afrunding(2.5) er 2, og afrunding(3.5) er 4. Dette reducerer kumulativ bias.

Fordi 2.675 ikke kan gemmes prรฆcist i binรฆr flydende komma; det holdes faktisk som omkring 2.6749999999999998, sรฅ round() runder ned. For prรฆcise resultater, brug decimal.Decimal('2.675').

Brug matematikmodulet: math.ceil(x) runder altid opad, math.floor(x) runder altid nedad, og int(x) afkortes mod nul. round() kan ikke i sig selv gennemtvinge en fast retning.

Send et negativt andet argument: round(12345, -1) giver 12340, round(12345, -2) giver 12300, og round(12345, -3) giver 12000. Negative ndigits runder af til venstre for decimaltegnet.

round(x, 2) รฆndrer den vรฆrdi, der bruges i senere matematik, mens f'{x:.2f}' kun formaterer visningen og bevarer tallet intakt. Brug round() til beregninger, f-strenge til output.

Nej. Numbers er uforanderlige, sรฅ round() returnerer en ny vรฆrdi uden at รฆndre dens input. Tildel den, for eksempel result = round(3.14159, 2); den oprindelige variabel bevarer fuld prรฆcision.

Maskinlรฆringskode afrunder nรธjagtigheds-, tabs- og sandsynlighedsvรฆrdier for lรฆsbare logfiler og for at knytte forudsigelser til klassenavne. Bevar fuld prรฆcision for gradientmatematik og afrund kun endeligt viste metrikker.

Ja. AI-assistenter som f.eks. GitHub Copilot autofuldfรธrelse round(), np.round() og decimalafrunding fra en kommentar eller et funktionsnavn, samt agentvรฆrktรธjer omdanner manuel formatering til round()-kald, selvom den valgte prรฆcision stadig skal gennemgรฅs.

Opsummer dette indlรฆg med: