Python Funkce round() s PŘÍKLADY

⚡ Chytré shrnutí

Python round() je vestavěná funkce, která vrací hodnotu s plovoucí desetinnou čárkou nebo celočíselnou hodnotu zaokrouhlenou na zadaný počet desetinných míst, přičemž k přerušení vazby směrem k nejbližší sudé číslici používá bankovní zaokrouhlení.

  • 🔘 Syntaxe: Funkce round(number, ndigits) přijímá hodnotu, která se má zaokrouhlit, a volitelný počet číslic, který je implicitně nastaven na nulu.
  • ☑️ Typ návratové hodnoty: Vynechání ndigits vrací celé číslo, jeho zadání vrací číslo s plovoucí čárkou.
  • (Tj. Bankovní zaokrouhlování: Poloviční hodnoty se zaokrouhlují na nejbližší sudé číslo, takže funkce round(2.5) vrací 2.
  • 🧪 Záporná čísla: Zaokrouhlování se vztahuje i na záporná čísla, tj. posunutí -2.8 na -3 a -1.5 na -2.
  • 🛠️ Přesné nástroje: Modul decimal a funkce round() v NumPy zpracovávají zaokrouhlování s pevnou přesností a pole.
  • 🤖 Pracovní postupy umělé inteligence: Kód strojového učení zaokrouhluje metriky, pravděpodobnosti a váhy pro přehlednější protokolování a reporty.

Python Funkce round().

Co je funkce round() v Python?

Python round() je vestavěná funkce dostupná s PythonVrátí vám číslo s desetinnou čárkou, které bude zaokrouhleno na desetinná místa zadaná jako vstup.

Pokud nejsou zaokrouhlena desetinná místa, považuje se to za 0 a zaokrouhlí se na nejbližší celé číslo.

Syntax

round(float_num, num_of_decimals)

parametry

  • číslo_s_floatem: Číslo s desetinnou čárkou, které se má zaokrouhlit.
  • počet_desetinných_míst: (volitelné) Počet desetinných míst, která se mají zohlednit při zaokrouhlování. Je volitelný a pokud není zadán, je výchozí hodnota 0 a zaokrouhlení se provede na nejbližší celé číslo.

Description

Metoda round() přijímá dva argumenty:

  • číslo, které má být zaokrouhleno, a
  • desetinná místa, která by měla brát v úvahu při zaokrouhlování.

Druhý argument je volitelný a pokud není zadán, má výchozí hodnotu 0. V takovém případě se zaokrouhlí na nejbližší celé číslo a návratový typ bude také celé číslo.

Když jsou uvedena desetinná místa, tj. druhý argument, zaokrouhlí se na daný počet míst. Návratový typ bude plovoucí.

Pokud je číslo za desetinným místem zadané:

  • >= 5, pak se k výsledné hodnotě přičte +1.
  • < 5, pak bude konečná hodnota vrácena tak, jak je, s přesností na uvedená desetinná místa.

Návratová hodnota

Pokud není zadán počet desetinných míst, vrátí celočíselnou hodnotu, a pokud je zadán počet desetinných míst, vrátí hodnotu s desetinnou čárkou. Upozorňujeme, že hodnota bude zaokrouhlena na +1, pokud je hodnota za desetinnou čárkou >= 5, jinak vrátí hodnotu tak, jak je, až na uvedený počet desetinných míst.

Jak velký dopad může mít zaokrouhlení? (zaokrouhlení vs zkrácení)

Nejlepším příkladem, který ukazuje dopad zaokrouhlování, je burza cenných papírů. V minulosti, tj. v roce 1982, Vancouver Stock Exchange (VSE) používaná ke zkrácení hodnot akcií na tři desetinná místa v každém obchodu.

Dělalo se to téměř 3000krát denně. Nahromaděná zkrácení vedla ke ztrátě přibližně 25 bodů měsíčně.

Příklad zkrácení hodnot versus zaokrouhlení je uveden níže.

Představte si níže vygenerovaná čísla s plovoucí desetinnou čárkou jako hodnoty akcií. Momentálně je generuji pro rozsah 1 000 000 sekund mezi 0.01 a 0.05.

Příklady:

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

Abych ukázal dopad zaokrouhlování, napsal jsem krátký kousek kódu, ve kterém nejprve použijete čísla pouze do 3 desetinných míst, tj. oříznete číslo po 3 desetinných místech.

Mám původní celkovou hodnotu, součet zkrácených hodnot a rozdíl mezi původní a zkrácenou hodnotou.

Na stejné sadě čísel jsem použil metodu round() až na 3 desetinná místa a vypočítal součet a rozdíl mezi původní hodnotou a zaokrouhlenou hodnotou.

Zde je příklad a výstup.

Příklad 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)

Výstup:

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

Rozdíl mezi původní a zkrácenou hodnotou je 499.9016193868665 a z round() je to 0.04661938686695066.

Rozdíl se zdá být velmi velký a příklad ukazuje, jak metoda round() pomáhá při výpočtech s téměř přesností.

Příklad: Zaokrouhlovací plovák Numbers

V tomto programu si ukážeme, jak funguje zaokrouhlování čísel s plovoucí čárkou.

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

Výstup:

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

Příklad: Zaokrouhlení celočíselných hodnot

Pokud náhodou použijete round() na celočíselnou hodnotu, vrátí vám to číslo zpět bez jakýchkoli změn.

# testing round() on a integer

num = 15

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

Výstup:

The output is 15

Příklad: Zaokrouhlení na záporné Numbers

Podívejme se na několik příkladů, jak funguje zaokrouhlování záporných čísel.

# testing round()

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

Výstup:

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

Příklad: Zaoblená pole NumPy

Jak zaokrouhlovat NumPy pole v Python?

K vyřešení tohoto problému můžeme použít modul NumPy a použít metodu numpy.round() nebo numpy.around(), jak je znázorněno v níže uvedeném příkladu.

Použití 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)

Výstup:

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

Můžeme také použít numpy.around(), což nám dá stejný výsledek jako numpy.round() zobrazený výše.

Příklad: Desetinný modul

Kromě funkce round() Python má decimalní modul, který pomáhá přesněji zpracovávat desetinná čísla.

Modul Decimal nabízí typy zaokrouhlování, jak je znázorněno níže:

  • KRUHOVÝ STROP: zaokrouhlí se směrem k nekonečnu.
  • ZAOKROUHLIT_DOLŮ: zaokrouhlí hodnotu směrem k nule.
  • KRUHOVÉ PATRO: zaokrouhlí se směrem k -nekonečnu.
  • ZAOKROUHLIT_DO_POLOVINY: Zaokrouhlí se na nejbližší hodnotu směřující k nule.
  • POLOVIČNÍ_KOLO_SUDÉ: Zaokrouhlí se na nejbližší hodnotu jdoucí do nejbližšího sudého celého čísla.
  • ZAOKROUHLÁ_POLOVINA_NAHORU: Zaokrouhlí se na nejbližší hodnotu směrem od nuly.
  • ZÁTAH: Zaokrouhlí se tam, kde se hodnota bude odchylovat od nuly.

V desítkové soustavě pomáhá metoda quantize() zaokrouhlovat na pevný počet desetinných míst a můžete zadat zaokrouhlování, které se má použít, jak je znázorněno v příkladu níže.

Příklad: Použití round() a desítkových metod

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)

Výstup:

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

Nejčastější dotazy

Ne. Python Funkce 3 používá zaokrouhlení na polovinu na sudou hodnotu (bankovní zaokrouhlení) pro remízy, takže round(0.5) je 0, round(2.5) je 2 a round(3.5) je 4. Tím se snižuje kumulativní zkreslení.

Protože číslo 2.675 nelze uložit přesně v binárním soustavě s plovoucí desetinnou čárkou, ve skutečnosti je uchováváno jako přibližně 2.6749999999999998, takže round() zaokrouhluje dolů. Pro přesné výsledky použijte decimal.Decimal('2.675').

Použijte modul math: math.ceil(x) vždy zaokrouhluje nahoru, math.floor(x) vždy zaokrouhluje dolů a int(x) ořezává směrem k nule. Samotná funkce round() nemůže vynutit pevný směr.

Předejte záporný druhý argument: round(12345, -1) vrátí 12340, round(12345, -2) vrátí 12300 a round(12345, -3) vrátí 12000. Záporné ndigits zaokrouhlí desetinnou čárku nalevo.

Funkce round(x, 2) mění hodnotu použitou v pozdějších matematických výpočtech, zatímco f'{x:.2f}' pouze formátuje zobrazení a zachovává číslo beze změny. Pro výpočty použijte round(), pro výstup f-řetězce.

Ne. Numbers jsou neměnné, takže round() vrací novou hodnotu bez změny vstupu. Přiřaďte ji, například result = round(3.14159, 2); původní proměnná si zachová plnou přesnost.

Kód strojového učení zaokrouhluje hodnoty přesnosti, ztrát a pravděpodobnosti pro čitelné protokoly a pro mapování predikcí na popisky tříd. Zachovává plnou přesnost pro gradientní matematiku a zaokrouhluje pouze konečné zobrazené metriky.

Ano. Asistenti umělé inteligence, jako je automatické doplňování round(), np.round() na GitHub Copilot a zaokrouhlování desetinných čísel z komentáře nebo názvu funkce, a nástroje agentic refaktorují ruční formátování do volání round(), i když zvolená přesnost je stále třeba zkontrolovat.

Shrňte tento příspěvek takto: