Python round()-funksjon med EKSEMPLER

โšก Smart oppsummering

Python round() er en innebygd funksjon som returnerer en flyttalls- eller heltallsverdi avrundet til et spesifisert antall desimaler, ved hjelp av bankers avrunding for รฅ bryte bรฅnd mot nรฆrmeste partall.

  • ๐Ÿ”˜ Syntaks: round(number, ndigits) aksepterer verdien som skal rundes av og et valgfritt sifferantall som standard er null.
  • โ˜‘๏ธ Returtype: ร… utelate ndigits returnerer et heltall, mens รฅ oppgi det returnerer et flyttall.
  • โœ… Bankers avrunding: Halvveisverdier rundes av til nรฆrmeste partall, sรฅ round(2.5) returnerer 2.
  • ๐Ÿงช Negative tall: Avrunding gjelder ogsรฅ for negative tall, og flytter -2.8 til -3 og -1.5 til -2.
  • ๐Ÿ› ๏ธ Presisjonsverktรธy: Desimalmodulen og NumPy round() hรฅndterer avrunding med fast presisjon og array-avrunding.
  • ๐Ÿค– AI-arbeidsflyter: Maskinlรฆringskode avrunder beregninger, sannsynligheter og vekter for renere logging og rapporter.

Python round() Funksjon

Hva er round()-funksjonen i Python?

Python round() er en innebygd funksjon tilgjengelig med PythonDen vil returnere deg et flyttall som vil bli avrundet til desimalene som er gitt som input.

Hvis desimalplassene som skal avrundes ikke er spesifisert, regnes det som 0, og det vil avrundes til nรฆrmeste heltall.

syntax

round(float_num, num_of_decimals)

Parametre

  • flyttall: Flyttallet som skal avrundes.
  • antall_desimaler: (valgfritt) Antall desimaler som skal tas i betraktning ved avrunding. Dette er valgfritt, og hvis ikke spesifisert, settes standardverdien til 0, og avrundingen gjรธres til nรฆrmeste heltall.

Tekniske beskrivelser

round()-metoden tar to argumenter:

  • tallet som skal avrundes, og
  • desimalene den bรธr vurdere ved avrunding.

Det andre argumentet er valgfritt og har som standard 0 nรฅr det ikke er spesifisert, og i slike tilfeller vil det runde av til nรฆrmeste heltall, og returtypen vil ogsรฅ vรฆre et heltall.

Nรฅr desimalplassene, dvs. det andre argumentet, er tilstede, vil det avrundes til antall oppgitte plasser. Returtypen vil vรฆre en float.

Hvis tallet etter desimalen som er oppgitt er:

  • >= 5, sรฅ vil + 1 bli lagt til den endelige verdien.
  • < 5, sรฅ vil den endelige verdien returneres som den er, opptil de nevnte desimalene.

Returverdi

Den vil returnere en heltallsverdi hvis num_of_decimals ikke er oppgitt, og en flyttallsverdi hvis num_of_decimals er oppgitt. Vรฆr oppmerksom pรฅ at verdien vil bli avrundet til +1 hvis verdien etter desimaltegnet er >= 5, ellers vil den returnere verdien som den er, opp til de nevnte desimalene.

Hvor stor innvirkning kan avrunding ha? (Avrunding vs trunkering)

Det beste eksemplet pรฅ รฅ vise effekten av avrunding er bรธrsmarkedet. Tidligere, dvs. i รฅr 1982, Vancouver bรธrs (VSE) brukes til รฅ avkorte aksjeverdiene til tre desimaler pรฅ hver handel.

Det ble gjort nesten 3000 ganger hver dag. De akkumulerte avkortningene fรธrte til et tap pรฅ rundt 25 poeng per mรฅned.

Et eksempel pรฅ avkorting av verdiene kontra avrunding er vist nedenfor.

Tenk pรฅ flyttallene som genereres nedenfor som standardverdier. Akkurat nรฅ genererer jeg dem for et omrรฅde pรฅ 1 000 000 sekunder mellom 0.01 og 0.05.

Eksempler:

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

For รฅ vise effekten av avrunding har jeg skrevet et lite kodestykke der du fรธrst bruker tallene opptil bare 3 desimaler, dvs. avkorter tallet etter 3 desimaler.

Jeg har den opprinnelige totalverdien, totalen som kommer fra de avkortede verdiene, og differansen mellom den opprinnelige og den avkortede verdien.

Pรฅ det samme settet med tall har jeg brukt round()-metoden opptil 3 desimaler og beregnet summen og differansen mellom den opprinnelige verdien og den avrundede verdien.

Her er eksemplet og resultatet.

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)

Utgang:

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

Forskjellen mellom den opprinnelige og den avkortede verdien er 499.9016193868665, og fra round() er den 0.04661938686695066.

Forskjellen ser ut til รฅ vรฆre veldig stor, og eksemplet viser hvordan round()-metoden bidrar til รฅ beregne tilnรฆrmet nรธyaktighet.

Eksempel: Rounding Float Numbers

I dette programmet skal vi se hvordan avrunding fungerer pรฅ flytende tall.

# 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))

Utgang:

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: Avrunding av heltallsverdier

Hvis du tilfeldigvis bruker round() pรฅ en heltallsverdi, vil den bare returnere tallet tilbake uten endringer.

# testing round() on a integer

num = 15

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

Utgang:

The output is 15

Eksempel: Avrunding pรฅ negativ Numbers

La oss se pรฅ noen eksempler pรฅ hvordan avrunding fungerer pรฅ negative tall.

# testing round()

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

Utgang:

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

Eksempel: Avrundede NumPy-matriser

Hvordan runder du NumPy arrayer i Python?

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

Bruker 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)

Utgang:

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

Vi kan ogsรฅ bruke numpy.around(), som gir deg samme resultat som numpy.round() vist ovenfor.

Eksempel: Desimalmodul

I tillegg til round()-funksjonen, Python har en desimalmodul som hjelper med รฅ hรฅndtere desimaltall mer nรธyaktig.

Desimalmodulen leveres med avrundingstyper, som vist nedenfor:

  • RUNDT_TAK: den vil runde mot uendelig.
  • AVRUND_NED: den vil runde verdien mot null.
  • RUND_ETASJE: den vil runde mot -uendeligheten.
  • RUND_HALV_NED: Den vil runde av til nรฆrmeste verdi mot null.
  • RUND_HALV_PARTY: den vil runde av til nรฆrmeste verdi og gรฅ videre til nรฆrmeste partall.
  • RUND_HALV_OPP: Den vil runde av til nรฆrmeste verdi som gรฅr bort fra null.
  • AVRUND OPP: den vil runde av der verdien gรฅr bort fra null.

I desimal hjelper quantize()-metoden รฅ runde av til et fast antall desimaler, og du kan spesifisere avrundingen som skal brukes, som vist i eksempelet nedenfor.

Eksempel: Bruke round() og desimalmetoder

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)

Utgang:

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

Spรธrsmรฅl og svar

Nei. Python 3 bruker avrunding fra halvparten til partall (bankens avrunding) for uavgjort, sรฅ round(0.5) er 0, round(2.5) er 2, og round(3.5) er 4. Dette reduserer kumulativ skjevhet.

Fordi 2.675 ikke kan lagres eksakt i binรฆr flyttall, holdes det faktisk som omtrent 2.6749999999999998, sรฅ runder round() nedover. For eksakte resultater, bruk decimal.Decimal('2.675').

Bruk matematikkmodulen: math.ceil(x) runder alltid oppover, math.floor(x) runder alltid nedover, og int(x) avkortes mot null. round() i seg selv kan ikke tvinge frem en fast retning.

Send et negativt andre argument: round(12345, -1) gir 12340, round(12345, -2) gir 12300, og round(12345, -3) gir 12000. Negative ndigits runder av til venstre for desimaltegnet.

round(x, 2) endrer verdien som brukes i senere matematikk, mens f'{x:.2f}' bare formaterer visningen og beholder tallet intakt. Bruk round() for beregninger, f-strenger for utdata.

Nei. Numbers er uforanderlige, sรฅ round() returnerer en ny verdi uten รฅ endre input. Tildel den, for eksempel result = round(3.14159, 2); den opprinnelige variabelen beholder full presisjon.

Maskinlรฆringskode avrunder nรธyaktighet, tap og sannsynlighetsverdier for lesbare logger og for รฅ tilordne prediksjoner til klasseetiketter. Behold full presisjon for gradientmatematikk og avrund kun endelige viste beregninger.

Ja. AI-assistenter som GitHub Copilot autofullfรธr round(), np.round() og desimal avrunding fra en kommentar eller et funksjonsnavn, og agentverktรธy omformer manuell formatering til round()-kall, selv om den valgte presisjonen fortsatt mรฅ gjennomgรฅs.

Oppsummer dette innlegget med: