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: