Python Funkcija round() s PRIMJERIMA

⚡ Pametni sažetak

Python round() je ugrađena funkcija koja vraća vrijednost s pomičnim zarezom ili cijeli broj zaokruženu na određeni broj decimalnih mjesta, koristeći bankarsko zaokruživanje za prekid veze prema najbližoj parnoj znamenki.

  • 🔘 Sintaksa: round(number, ndibits) prihvaća vrijednost zaokruživanja i opcionalni broj znamenki koji je zadano nula.
  • ☑️ Vrsta povrata: Izostavljanje ndigits vraća cijeli broj, dok njegovo navođenje vraća broj s pomičnim zarezom.
  • Bankarsko zaokruživanje: Polovične vrijednosti zaokružuju se na najbliži paran broj, pa round(2.5) vraća 2.
  • 🧪 Negativni brojevi: Zaokruživanje se primjenjuje i na negativne brojeve, pomičući -2.8 na -3 i -1.5 na -2.
  • 🛠️ Precizni alati: Decimalni modul i NumPy round() obrađuju zaokruživanje fiksne preciznosti i nizova.
  • 🤖 Tijekovi rada umjetne inteligencije: Kod strojnog učenja zaokružuje metrike, vjerojatnosti i težine radi čišćeg evidentiranja i izvješća.

Python funkcija round().

Što je funkcija round() u Python?

Python round() je ugrađena funkcija dostupna s PythonVratit će vam broj s pomičnim zarezom koji će biti zaokružen na decimalna mjesta koja su zadana kao ulaz.

Ako decimalna mjesta koja se zaokružuju nisu navedena, smatra se da je 0 i zaokružit će se na najbliži cijeli broj.

Sintaksa

round(float_num, num_of_decimals)

Parametri

  • broj_s_floatom: Broj s pomičnim decimalom koji treba zaokružiti.
  • broj_decimalnih_mjeseca: (neobavezno) Broj decimalnih mjesta koji se uzimaju u obzir prilikom zaokruživanja. Nije obavezno, a ako nije navedeno, zadana vrijednost je 0, a zaokruživanje se vrši na najbliži cijeli broj.

Description

Metoda round() prima dva argumenta:

  • broj koji treba zaokružiti, i
  • decimalna mjesta koja treba uzeti u obzir prilikom zaokruživanja.

Drugi argument je opcionalan i zadana vrijednost je 0 kada nije naveden, a u tom slučaju će se zaokružiti na najbliži cijeli broj, a povratni tip će također biti cijeli broj.

Kada su prisutna decimalna mjesta, tj. drugi argument, zaokružit će se na navedeni broj mjesta. Tip povrata bit će float.

Ako je broj iza decimalnog mjesta zadan:

  • >= 5, tada će se konačnoj vrijednosti dodati +1.
  • < 5, tada će se konačna vrijednost vratiti kakva jest, do navedenih decimalnih mjesta.

Povratna vrijednost

Vratit će cjelobrojnu vrijednost ako broj_decimala nije zadan, a vrijednost s pomičnim zarezom ako je zadan broj_decimala. Imajte na umu da će vrijednost biti zaokružena na +1 ako je vrijednost nakon decimalne točke >= 5, inače će vratiti vrijednost kakva jest, do navedenih decimalnih mjesta.

Koliki utjecaj može imati zaokruživanje? (Zaokruživanje u odnosu na skraćivanje)

Najbolji primjer koji pokazuje utjecaj zaokruživanja je burza. U prošlosti, tj. 1982. godine, Burza u Vancouveru (VSE) koristi se za skraćivanje vrijednosti dionica na tri decimalna mjesta u svakoj trgovini.

To se radilo gotovo 3000 puta svaki dan. Nagomilana skraćivanja dovela su do gubitka od oko 25 bodova mjesečno.

Dolje je prikazan primjer skraćivanja vrijednosti u odnosu na zaokruživanje.

Razmotrite dolje generirane brojeve s pomičnim zarezom kao vrijednosti dionica. Trenutno ih generiram za raspon od 1,000,000 sekundi između 0.01 i 0.05.

Primjeri:

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

Kako bih pokazao utjecaj zaokruživanja, napisao sam mali dio koda u kojem se prvo koriste brojevi do samo 3 decimale, tj. skraćuje se broj nakon 3 decimale.

Imam izvornu ukupnu vrijednost, ukupan zbroj koji dolazi od skraćenih vrijednosti i razliku između izvorne i skraćene vrijednosti.

Na istom skupu brojeva koristio sam metodu round() do 3 decimale i izračunao zbroj i razliku između izvorne vrijednosti i zaokružene vrijednosti.

Evo primjera i rezultata.

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

Izlaz:

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

Razlika između izvorne i skraćene vrijednosti je 499.9016193868665, a iz round() je 0.04661938686695066.

Razlika se čini vrlo velikom, a primjer pokazuje kako metoda round() pomaže u izračunu gotovo točnim.

Primjer: Rounding Float Numbers

U ovom programu ćemo vidjeti kako zaokruživanje funkcionira na brojevima s pomičnim snopom.

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

Izlaz:

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

Primjer: Zaokruživanje cijelih vrijednosti

Ako slučajno koristite round() na cjelobrojnoj vrijednosti, ona će vam samo vratiti broj bez ikakvih promjena.

# testing round() on a integer

num = 15

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

Izlaz:

The output is 15

Primjer: zaokruživanje na negativno Numbers

Pogledajmo nekoliko primjera kako zaokruživanje funkcionira na negativnim brojevima.

# testing round()

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

Izlaz:

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

Primjer: Zaokruženi NumPy nizovi

Kako zaokružiti NumPy nizovi u Python?

Da bismo to riješili, možemo koristiti NumPy modul i koristiti metodu numpy.round() ili numpy.around(), kao što je prikazano u primjeru ispod.

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

Izlaz:

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

Također možemo koristiti numpy.around(), koji daje isti rezultat kao numpy.round() prikazan gore.

Primjer: decimalni modul

Uz funkciju round(), Python ima decimalni modul koji pomaže u preciznijem rukovanju decimalnim brojevima.

Modul Decimal dolazi s vrstama zaokruživanja, kao što je prikazano u nastavku:

  • OKRUGLI STROP: zaokružit će se prema Beskonačnosti.
  • ZAOKRUŽIVANJE: zaokružit će vrijednost prema nuli.
  • OKRUGLI KAT: zaokružit će se prema -beskonačno.
  • ZAOKRUŽENO_DO_POLOVICE: zaokružit će se na najbližu vrijednost koja ide prema nuli.
  • POLU_RUND_PARNO: zaokružit će se na najbližu vrijednost idući do najbližeg parnog cijelog broja.
  • ZAOKRUŽENJE_NA_POLOVICU_GORE: zaokružit će se na najbližu vrijednost udaljavajući se od nule.
  • ZAOKRUŽIVANJE: zaokružit će se tamo gdje će se vrijednost udaljavati od nule.

U decimalnom sustavu, metoda quantize() pomaže u zaokruživanju na fiksni broj decimalnih mjesta, a možete odrediti zaokruživanje koje će se koristiti, kao što je prikazano u primjeru u nastavku.

Primjer: Korištenje round() i decimalnih metoda

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)

Izlaz:

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

Pitanja i odgovori

Ne. Python 3 koristi zaokruživanje na polovicu na paran broj (bankarovo zaokruživanje) za neriješene rezultate, pa je round(0.5) 0, round(2.5) 2, a round(3.5) 4. To smanjuje kumulativnu pristranost.

Budući da se 2.675 ne može pohraniti točno u binarnom formatu s pomičnim zarezom; zapravo se čuva kao otprilike 2.6749999999999998, pa se round() zaokružuje prema dolje. Za točne rezultate koristite decimal.Decimal('2.675').

Koristite math modul: math.ceil(x) uvijek zaokružuje prema gore, math.floor(x) uvijek zaokružuje prema dolje, a int(x) skraćuje prema nuli. round() sam po sebi ne može nametnuti fiksni smjer.

Proslijedite negativni drugi argument: round(12345, -1) daje 12340, round(12345, -2) daje 12300, a round(12345, -3) daje 12000. Negativni ndigits zaokružuje lijevo od decimalne točke.

round(x, 2) mijenja vrijednost korištenu u kasnijoj matematici, dok f'{x:.2f}' samo formatira prikaz i čuva broj netaknutim. Koristite round() za izračune, f-stringove za izlaz.

Ne. Numbers su nepromjenjive, pa round() vraća novu vrijednost bez promjene ulaza. Dodijelite je, na primjer rezultat = round(3.14159, 2); izvorna varijabla zadržava punu preciznost.

Kod strojnog učenja zaokružuje vrijednosti točnosti, gubitka i vjerojatnosti za čitljive zapise i mapiranje predviđanja na oznake klasa. Zadržite punu preciznost za matematiku gradijenta i zaokružite samo konačne prikazane metrike.

Da. AI asistenti poput GitHub Copilot autocomplete round(), np.round() i decimalnog zaokruživanja iz komentara ili naziva funkcije, te agentic alati refaktoriraju ručno formatiranje u round() pozive, iako odabrana preciznost još uvijek treba provjeriti.

Sažmite ovu objavu uz: