Jak zaokrouhlovat čísla v Pythonu [With Examples]

Práce s numerickými datovými typy v Pythonu? Zvyšte úroveň tím, že se naučíte různé způsoby zaokrouhlování čísel v Pythonu.

Většina datových sad v reálném světě obsahuje numerické i kategorické prvky. K dispozici je široká škála numerických funkcí, od hodnot senzorů po směnné kurzy, biomedicínské signály a další.

Při práci s číselnými hodnotami může být nutné tyto hodnoty zaokrouhlit na pevnou přesnost z následujících důvodů:

  • Zajištění konzistentního formátu
  • Jednodušší skladování a zpracování

V tomto tutoriálu se naučíme různé způsoby, jak zaokrouhlit číslo na konkrétní přesnost, zaokrouhlit čísla nahoru a dolů na nejbližší celé číslo a mnoho dalšího.

Začněme.

Jak zaokrouhlovat čísla pomocí vestavěné funkce round().

Nejběžnější metodou zaokrouhlení čísel v Pythonu je použití vestavěného funkce round().. Začněme tím, že se naučíme jeho syntaxi:

round(num, ndigits)

Tady,

  • num je číslo, které chcete zaokrouhlit
  • ndigits je volitelný parametr s výchozí hodnotou Žádné. Je to počet míst, na která se má číslo zaokrouhlit. Je-li nčíslic = 2, zaokrouhlí se num na dvě místa za desetinnou čárkou.
  • Funkce round() vrací za desetinnou čárkou číslo zaokrouhlené na nčíslic.

Příklady použití funkce Python round()

Pojďme si nakódovat několik příkladů, abychom pochopili, jak funkce round() funguje.

Jak již bylo zmíněno, n číslic je volitelný. Když tedy zavoláme round() pouze s číslem, číslo se zaokrouhlí na nejbližší celé číslo.

number = 7.123456
rounded = round(number)  
print(rounded)
# Output: 7

Nyní si uveďme několik příkladů, kde specifikujeme přesnost.

S nčíslicemi nastavenými na 2 je číslo zaokrouhleno na dvě desetinná místa (desáté místo):

number = 7.123456
rounded = round(number, 2)  
print(rounded)
# Output: 7.12

S nčíslicemi nastavenými na 3 je číslo zaokrouhleno na tři desetinná místa (sté místo):

number = 7.123456
rounded = round(number, 3)  
print(rounded)
# Output: 7.123

K zaokrouhlení záporných čísel můžete použít i round():

number = -3.4
rounded = round(number)
print(rounded) 
# Output: -3

Zde funkce zaokrouhlí -3,4 na -3, nejbližší celé číslo.

  Existuje nějaký hack Uber Free Ride?

Zaokrouhlení na nejbližší místo desítek a stovek

Věděli jste, že nčíslice mohou nabývat i záporných hodnot?

Ano, funkci round() můžete volat se zápornými hodnotami pro n číslic. Když tak učiníte, zaokrouhlí se doleva od desetinné čárky místo doprava.

Co to znamená? Podívejme se na několik příkladů.

Když nastavíme nčíslic na -1, číslo se zaokrouhlí na nejbližší desítky.

number = 7.123456
rounded = round(number, -1)  
print(rounded)
# Output: 10.0

A volání funkce round() s nčíslicemi nastavenými na -2 zaokrouhlí číslo 77,123456 na nejbližší stovku, což je v tomto případě 100,0.

number = 77.123456
rounded = round(number, -2)  
print(rounded)
# Output: 100.0

Zatím se zdá, že funkce round() se řídí obecnými principy zaokrouhlování, které jsme se naučili ve školní matematice. Ale není tomu tak vždy.

Tam jsou nějací omezení s pohyblivou řádovou čárkou čísla. Při zaokrouhlování tedy můžete vidět nějaké neočekávané výsledky. Dalším zajímavým upozorněním je bankéřovo zaokrouhlování.

Co je zaokrouhlení bankéře?

Spusťte Python REPL a vyzkoušejte následující příklad:

>>> round(1.5)
2

Vidíme, že round(1.5) vrací 2 (podle očekávání). Co by tedy mělo kolo(2.5) vrátit?

>>> round(2.5)
2

Zajímavé, ano? Jak kolo(1,5), tak kolo(2,5) vrátí 2. Ale jak a proč?

Interně funkce zaokrouhlení funguje takto: jakákoli hodnota, která je uprostřed mezi dvěma celými čísly, se zaokrouhlí na nejbližší sudé celé číslo. Tomu se říká zaokrouhlování bankéře nebo strategie kulaté poloviny až sudé.

Víme, že funkce round() stačí pro jednoduché úlohy zaokrouhlování. Někdy však může být nutné zaokrouhlit číslo nahoru nebo dolů na nejbližší celé číslo.

Tak jak to uděláš? Pojďme se to naučit v další části.

Jak zaokrouhlit čísla v Pythonu

Chcete-li zaokrouhlit číslo nahoru na nejbližší celé číslo, můžete použít:

  6 nejlepších nástrojů sociálního naslouchání pro rostoucí podnikání

Pomocí math.ceil

Funkce ceil() (nebo funkce stropu) funguje takto: Zaokrouhlí číslo nahoru na nejmenší celé číslo, které je větší než číslo.

Následující úryvek ukazuje, jak pomocí funkce ceil() zaokrouhlit číslo 3,2 nahoru:

import math

number = 3.2
rounded_up = math.ceil(number)
print(rounded_up)  
# Output: 4

Použití desetinného modulu

Doposud jsme používali vestavěný datový typ float. Ale pro určité aplikace ve vědeckých počítačích a financích potřebujeme mnohem vyšší přesnost. A za tímto účelem se Python dodává s desítkovým modulem, který poskytuje:

  • Přesnější aritmetika s pohyblivou řádovou čárkou
  • Spolehlivé testování rovnosti
  • Jemnější ovládání úrovně přesnosti (výchozí přesnost je 28 míst)

Chcete-li zobrazit aktuální kontext, použijte getcontext(), jak je znázorněno:

from decimal import getcontext
current_context = getcontext()
print(current_context)

Měli byste být schopni vidět aktuální režim přesnosti a zaokrouhlování, mimo jiné:

# Output
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, 
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

Chcete-li zaokrouhlit číslo nahoru, můžete použít quantize() zadáním:

  • Přesnost (0,0, protože chceme zaokrouhlit nahoru na nejbližší celé číslo) a
  • Režim zaokrouhlení: ROUND_CEILING
from decimal import Decimal, ROUND_CEILING

number = Decimal('3.2')
rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(rounded_up)  
# Output: 4

Zde bylo číslo 3,2 zaokrouhleno nahoru na nejbližší celé číslo 4.

Jak zaokrouhlit čísla dolů v Pythonu

Nyní se podívejme, jak zaokrouhlit čísla dolů v Pythonu. Podobně jako u procesu zaokrouhlování můžeme použít buď matematický, nebo desetinný modul.

Pomocí math.floor

Funkce floor() z matematického modulu funguje takto: Zaokrouhlí číslo dolů na největší celé číslo, které je menší než číslo.

Vezměme si následující příklad:

import math

number = 3.8
rounded_down = math.floor(number)
print(rounded_down)  
# Output: 3

Zde funkce floor() zaokrouhlí dolů číslo s plovoucí desetinnou čárkou 3,8 na 3.

Použití desetinného modulu

Chcete-li zaokrouhlit číslo dolů, můžete použít quantize() nastavením režimu zaokrouhlení na ROUND_FLOOR.

from decimal import Decimal, ROUND_FLOOR

number = Decimal('3.8')
rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(rounded_down)  
# Output: 3

Jak je vidět, 3,8 bylo zaokrouhleno dolů na 3.

Běžné nástrahy, kterým je třeba se vyhnout při zaokrouhlování čísel

Už jsme viděli, že funkce round() zaokrouhluje z poloviny na sudé, což nemusí být vždy žádoucí. Při zaokrouhlování čísel v Pythonu je třeba se vyhnout dalším běžným nástrahám:

  • Nesprávné srovnání rovnosti: Zaokrouhlování čísel často přináší zaokrouhlovací chyby. Pokud se pokusíte provést srovnání rovnosti mezi zaokrouhleným výsledkem s jinou hodnotou, kontrola rovnosti (téměř vždy) selže kvůli různé přesnosti. Snažte se tedy vyhnout kontrolám rovnosti mezi čísly s plovoucí desetinnou čárkou a zaokrouhlenými čísly s plovoucí desetinnou čárkou. Pokud je srovnání nezbytné, zaveďte práh tolerance.
  • Ztráta informací: Možná budete chtít určitá data, jako jsou hodnoty senzorů v různých časových razítkách, zachycená s vysokou přesností. Zaokrouhlení takových dat na méně desetinných míst má za následek ztrátu informací a nesprávnou analýzu.
  • Zaokrouhlení mezivýsledků: Součástí výpočtu bude často více kroků. Používejte konzistentní přesnost ve všech krocích. Také se vyhněte zaokrouhlování v mezikrokech, abyste zabránili zaokrouhlovacím chybám ve skládání.
  19 Nejlepší aplikace pro obnovu fotografií pro iPhone

Nejlepší postupy pro zaokrouhlování čísel v Pythonu

Uveďme některé osvědčené postupy, které je třeba dodržovat při zaokrouhlování čísel v Pythonu:

  • Vyberte správný datový typ: Vyberte si mezi datovými typy s plovoucí a desítkovou soustavou v závislosti na aplikaci. Pokud potřebujete provádět vysoce přesnou aritmetiku s pohyblivou řádovou čárkou, zvolte desetinný datový typ.
  • Používejte konzistentní úrovně přesnosti: Nastavte konzistentní úrovně přesnosti pro desetinná čísla v celém programu, abyste se vyhnuli neočekávaným chybám při zaokrouhlování.
  • Techniky zaokrouhlování dokumentů: V aplikacích v reálném světě zahrnujících data, jako je měna a údaje ze senzorů, je důležité mít konzistentní a zdokumentovanou techniku ​​zaokrouhlování.

Zabalit se

Zakončeme tutoriál rychlým přehledem toho, co jsme se naučili:

  • S touto syntaxí round(num, ndigits) můžete použít vestavěnou funkci round(). Při používání funkce round() byste si měli být vědomi bankovní strategie zaokrouhlování. Zaokrouhluje tedy čísla přesně mezi dvěma celými čísly na nejbližší sudé celé číslo.
  • Pomocí funkcí ceil() a floor() z matematického modulu můžete dané číslo zaokrouhlit nahoru a dolů na nejbližší celé číslo.
  • Pokud potřebujete provést vysoce přesnou aritmetiku s plovoucí desetinnou čárkou, použijte modul desítkové soustavy. Čísla můžete zaokrouhlovat s požadovanou přesností a strategií zaokrouhlování.
  • Měli byste si být vědomi běžných úskalí se zaokrouhlováním čísel v Pythonu. Patří mezi ně ztráta informací ze zaokrouhlování, zaokrouhlování výsledků v mezikrokech a použití různé přesnosti v různých částech kódu.
  • Osvědčené postupy zahrnují výběr správného datového typu v závislosti na aplikaci a dokumentaci konzistentních úrovní přesnosti.

Dále se naučte, jak provést rozdělení podlahy v Pythonu.

Byl tento článek užitečný?

Děkujeme vám za vaši reakci!