Python round()-funktion med EXEMPEL

⚡ Smart sammanfattning

Python round() är en inbyggd funktion som returnerar ett flyttal eller heltal avrundat till ett angivet antal decimaler, med hjälp av bankers avrundning för att bryta oavbrutet värde mot närmaste jämna siffra.

  • 🔘 Syntax: round(number, ndigits) accepterar värdet som ska avrundas och ett valfritt sifferantal som som standard är noll.
  • ☑️ Returtyp: Att utelämna ndigits returnerar ett heltal, medan att ange det returnerar ett flyttal.
  • Bankers avrundning: Halvvägsvärden avrundas till närmaste jämna tal, så round(2.5) returnerar 2.
  • 🧪 Negativa tal: Avrundning gäller även för negativa tal, och flyttar -2.8 till -3 och -1.5 till -2.
  • 🛠️ Precisionsverktyg: Decimalmodulen och NumPy round() hanterar avrundning med fast precision och arrayer.
  • 🤖 AI-arbetsflöden: Maskininlärningskod avrundar mätvärden, sannolikheter och vikter för renare loggning och rapporter.

Python round() Funktion

Vad är round()-funktionen i Python?

Python round() är en inbyggd funktion som är tillgänglig med PythonDen returnerar ett flyttal som avrundas till decimaler som anges som indata.

Om de decimaler som ska avrundas inte anges, betraktas det som 0, och det avrundas till närmaste heltal.

syntax

round(float_num, num_of_decimals)

Driftparametrar

  • flyttalnummer: Flyttalsvärdet som ska avrundas.
  • antal_decimaler: (valfritt) Antalet decimaler som ska beaktas vid avrundning. Det är valfritt, och om inget anges är standardvärdet 0, och avrundningen görs till närmaste heltal.

BESKRIVNING

Metoden round() tar två argument:

  • det tal som ska avrundas, och
  • de decimaler den bör beakta vid avrundning.

Det andra argumentet är valfritt och har som standard 0 när det inte anges, och i sådant fall avrundas det till närmaste heltal, och returtypen blir också ett heltal.

När decimalerna, dvs det andra argumentet, finns, avrundas det till antalet angivna platser. Returtypen kommer att vara en float.

Om talet efter decimalen är:

  • >= 5, då läggs + 1 till det slutliga värdet.
  • < 5, så returneras det slutliga värdet som det är, upp till de angivna decimalerna.

Returvärde

Den returnerar ett heltal om num_of_decimals inte anges och ett flyttal om num_of_decimals anges. Observera att värdet avrundas till +1 om värdet efter decimaltecknet är >= 5, annars returnerar den värdet som det är, upp till de angivna decimalerna.

Hur stor påverkan kan avrundning ha? (Avrundning vs trunkering)

Det bästa exemplet för att visa avrundningens inverkan är börsmarknaden. Förr i tiden, dvs. år 1982, Vancouver Stock Exchange (VSE) används för att avkorta aktievärdena till tre decimaler vid varje handel.

Det gjordes nästan 3000 gånger varje dag. De ackumulerade avkortningarna ledde till en förlust på cirka 25 poäng per månad.

Ett exempel på trunkering av värdena kontra avrundning visas nedan.

Betrakta flyttalstalen som genereras nedan som standardvärden. Just nu genererar jag dem för ett intervall på 1 000 000 sekunder mellan 0.01 och 0.05.

Exempel:

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

För att visa effekten av avrundning har jag skrivit en liten kodsnutt där man först använder siffrorna upp till endast 3 decimaler, dvs. avkortar talet efter 3 decimaler.

Jag har det ursprungliga totalvärdet, summan som kommer från de avkortade värdena och skillnaden mellan det ursprungliga och det avkortade värdet.

På samma uppsättning tal har jag använt round()-metoden upp till 3 decimaler och beräknat summan och skillnaden mellan det ursprungliga värdet och det avrundade värdet.

Här är exemplet och utdata.

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

Produktion:

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

Skillnaden mellan det ursprungliga och det avkortade värdet är 499.9016193868665, och från round() är det 0.04661938686695066.

Skillnaden verkar vara mycket stor, och exemplet visar hur round()-metoden hjälper till att beräkna med nära noggrannhet.

Exempel: Rounding Float Numbers

I det här programmet ska vi se hur avrundning fungerar på flytande 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))

Produktion:

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

Exempel: Avrundning av heltalsvärden

Om du råkar använda round() på ett heltalsvärde, kommer det bara att returnera dig numret utan några ändringar.

# testing round() on a integer

num = 15

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

Produktion:

The output is 15

Exempel: Avrundning till negativ Numbers

Låt oss se några exempel på hur avrundning fungerar på negativa 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))

Produktion:

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

Exempel: Runda NumPy-matriser

Hur avrundar man NumPy arrayer i Python?

För att lösa detta kan vi använda NumPy-modulen och använda metoden numpy.round() eller numpy.around(), som visas i exemplet nedan.

Använder 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)

Produktion:

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

Vi kan också använda numpy.around(), vilket ger samma resultat som numpy.round() som visas ovan.

Exempel: Decimalmodul

Förutom round()-funktionen, Python har en decimalmodul som hjälper till att hantera decimaltal mer exakt.

Decimalmodulen har avrundningstyper, som visas nedan:

  • RUNDT_TAK: den kommer att runda mot oändligheten.
  • AVRUNDA_NER: den kommer att avrunda värdet mot noll.
  • ROUND_FLOOR: den kommer att runda mot -oändligheten.
  • RUNDA_HALV_NER: Den avrundas till närmaste värde mot noll.
  • ROUND_HALV_JÄMN: den avrundas till närmaste värde och går vidare till närmaste jämna heltal.
  • AVRUNDA_HALV_UPPÅ: Den avrundas till närmaste värde som går bort från noll.
  • AVRUNDA UPPÅT: Den kommer att avrunda där värdet går bort från noll.

I decimal hjälper quantize()-metoden att avrunda till ett fast antal decimaler, och du kan ange vilken avrundning som ska användas, som visas i exemplet nedan.

Exempel: Använder round() och 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)

Produktion:

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

Vanliga frågor

Nej. Python 3 använder avrundning från hälften till jämnt (bankens avrundning) för oavgjort, så round(0.5) är 0, round(2.5) är 2 och round(3.5) är 4. Detta minskar kumulativ bias.

Eftersom 2.675 inte kan lagras exakt som ett binärt flyttal, hålls det faktiskt som ungefär 2.6749999999999998, så avrundar round() nedåt. För exakta resultat, använd decimal.Decimal('2.675').

Använd matematikmodulen: math.ceil(x) avrundar alltid uppåt, math.floor(x) avrundar alltid nedåt och int(x) avrundar mot noll. round() i sig kan inte tvinga fram en fast riktning.

Skicka ett negativt andra argument: round(12345, -1) ger 12340, round(12345, -2) ger 12300 och round(12345, -3) ger 12000. Negativa ndigits avrundar till vänster om decimaltecknet.

round(x, 2) ändrar värdet som används i senare matematik, medan f'{x:.2f}' bara formaterar visningen och behåller talet intakt. Använd round() för beräkningar, f-strängar för utdata.

Nej. Numbers är oföränderliga, så round() returnerar ett nytt värde utan att ändra dess indata. Tilldela det, till exempel result = round(3.14159, 2); den ursprungliga variabeln behåller full precision.

Maskininlärningskod avrundar noggrannhets-, förlust- och sannolikhetsvärden för läsbara loggar och för att mappa förutsägelser till klassetiketter. Behåll full precision för gradientmatematik och avrunda endast slutgiltiga visade mätvärden.

Ja. AI-assistenter som GitHub Copilot autokompletterar round(), np.round() och decimalavrundning från en kommentar eller ett funktionsnamn, och agentverktyg omstrukturerar manuell formatering till round()-anrop, även om den valda precisionen fortfarande behöver granskas.

Sammanfatta detta inlägg med: