Jak zaokrąglać liczby w Pythonie [With Examples]

Pracujesz z numerycznymi typami danych w Pythonie? Zdobywaj kolejne poziomy, ucząc się różnych sposobów zaokrąglania liczb w Pythonie.

Większość zbiorów danych ze świata rzeczywistego zawiera zarówno funkcje numeryczne, jak i kategoryczne. Dostępnych jest wiele funkcji numerycznych, od odczytów czujników po kursy wymiany walut, sygnały biomedyczne i nie tylko.

Podczas pracy z wartościami liczbowymi może zaistnieć potrzeba zaokrąglenia tych wartości do ustalonej precyzji z następujących powodów:

  • Zapewnienie spójnego formatu
  • Łatwiejsze przechowywanie i przetwarzanie

W tym samouczku nauczymy się różnych sposobów zaokrąglania liczb do określonej precyzji, zaokrąglania liczb w górę i w dół do najbliższej liczby całkowitej i wiele więcej.

Zacznijmy.

Jak zaokrąglać liczby za pomocą wbudowanej funkcji round().

Najpopularniejszą metodą zaokrąglania liczb w Pythonie jest użycie wbudowanej funkcji funkcja round().. Zacznijmy od poznania jego składni:

round(num, ndigits)

Tutaj,

  • liczba to liczba, którą chcesz zaokrąglić
  • ndigits to parametr opcjonalny z wartością domyślną Brak. Jest to liczba miejsc, do których należy zaokrąglić liczbę. Jeśli ncyfr = 2, liczba jest zaokrąglana do dwóch miejsc po przecinku.
  • Funkcja round() zwraca liczbę zaokrągloną do ncyfr z dokładnością po przecinku.

Przykłady użycia funkcji Python round().

Zakodujmy kilka przykładów, aby zrozumieć, jak działa funkcja round().

Jak wspomniano, ndigits jest opcjonalne. Kiedy więc wywołamy funkcję round() zawierającą tylko liczbę, liczba ta zostanie zaokrąglona do najbliższej liczby całkowitej.

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

Weźmy teraz kilka przykładów, w których określamy precyzję.

Jeśli ndigits jest ustawione na 2, liczba jest zaokrąglana do dwóch miejsc po przecinku (dziesiąte miejsce):

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

Jeśli ndigits jest ustawione na 3, liczba jest zaokrąglana do trzech miejsc po przecinku (setne miejsce):

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

Możesz użyć funkcji round() również do zaokrąglenia liczb ujemnych:

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

W tym przypadku funkcja zaokrągla -3,4 do -3, najbliższej liczby całkowitej.

Zaokrąglanie do najbliższego miejsca dziesiątek i setek

Czy wiesz, że ndigits mogą przyjmować również wartości ujemne?

Tak, możesz wywołać funkcję round() z wartościami ujemnymi dla ndigits. Gdy to zrobisz, zaokrąglenie nastąpi po lewej stronie przecinka dziesiętnego, a nie po prawej.

Co to znaczy? Zobaczmy kilka przykładów.

Kiedy ustawimy ndigits na -1, liczba zostanie zaokrąglona do najbliższego miejsca dziesiątek.

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

A wywołanie funkcji round() z ndigits ustawionymi na -2 zaokrągla liczbę 77.123456 w górę do najbliższej setki, która w tym przypadku wynosi 100,0.

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

Jak dotąd funkcja round() wydaje się być zgodna z ogólnymi zasadami zaokrąglania, których nauczyliśmy się na lekcjach matematyki. Ale nie zawsze tak jest.

Tam jest trochę ograniczenia ze zmiennoprzecinkową liczby. Dlatego podczas zaokrąglania możesz zobaczyć nieoczekiwane wyniki. Kolejnym interesującym zastrzeżeniem jest zaokrąglenie bankiera.

Co to jest zaokrąglanie bankiera?

Rozpocznij REPL języka Python i wypróbuj następujący przykład:

>>> round(1.5)
2

Widzimy, że round(1.5) zwraca 2 (zgodnie z oczekiwaniami). Co zatem powinno zwrócić runda (2.5)?

>>> round(2.5)
2

Ciekawe, prawda? Zarówno runda (1,5), jak i runda (2,5) zwracają 2. Ale jak i dlaczego?

Wewnętrznie funkcja round działa w następujący sposób: każda wartość znajdująca się w połowie między dwiema liczbami całkowitymi jest zaokrąglana do najbliższej parzystej liczby całkowitej. To się nazywa zaokrąglenie bankiera lub połowa rundy, aby wyrównać strategię.

Wiemy, że do prostych zadań zaokrąglania wystarczy funkcja round(). Czasami jednak może zaistnieć potrzeba zaokrąglenia liczby w górę lub w dół do najbliższej liczby całkowitej.

Jak to zrobić? Dowiemy się tego w następnej sekcji.

Jak zaokrąglać liczby w Pythonie

Aby zaokrąglić liczbę do najbliższej liczby całkowitej, możesz użyć:

Używanie math.ceil

Funkcja ceil() (lub funkcja sufitowa) działa w następujący sposób: zaokrągla liczbę w górę do najmniejszej liczby całkowitej, która jest większa od liczby.

Poniższy fragment pokazuje, jak używać funkcji ceil() do zaokrąglania liczby 3.2 w górę:

import math

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

Korzystanie z modułu dziesiętnego

Do tej pory korzystaliśmy z wbudowanego typu danych float. Jednak w przypadku niektórych zastosowań w informatyce naukowej i finansach potrzebujemy znacznie większej precyzji. W tym celu Python jest dostarczany z modułem dziesiętnym, który zapewnia:

  • Bardziej precyzyjna arytmetyka zmiennoprzecinkowa
  • Wiarygodne testy równości
  • Lepsza kontrola nad poziomem precyzji (domyślna precyzja to 28 miejsc)

Aby zobaczyć bieżący kontekst, użyj getcontext(), jak pokazano:

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

Powinieneś być w stanie zobaczyć między innymi bieżący tryb precyzji i zaokrąglania:

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

Aby zaokrąglić liczbę, możesz użyć metody quantize(), określając:

  • Precyzja (0,0, ponieważ chcemy zaokrąglić w górę do najbliższej liczby całkowitej) i
  • Tryb zaokrąglania: 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

Tutaj liczbę 3,2 zaokrąglono w górę do najbliższej liczby całkowitej 4.

Jak zaokrąglać liczby w Pythonie

Zobaczmy teraz, jak zaokrąglić liczby w dół w Pythonie. Podobnie jak w przypadku zaokrąglania, możemy użyć modułów matematycznych lub dziesiętnych.

Korzystanie z math.floor

Funkcja Floor() z modułu math działa w następujący sposób: zaokrągla liczbę w dół do największej liczby całkowitej, która jest mniejsza od liczby.

Weźmy następujący przykład:

import math

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

W tym przypadku funkcja Floor() zaokrągla liczbę zmiennoprzecinkową w dół od 3,8 do 3.

Korzystanie z modułu dziesiętnego

Aby zaokrąglić liczbę w dół, możesz użyć metody quantize(), ustawiając tryb zaokrąglania 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 widać, 3,8 zostało zaokrąglone w dół do 3.

Typowe pułapki, których należy unikać podczas zaokrąglania liczb

Widzieliśmy już, że funkcja round() zaokrągla połowę do parzystej, co nie zawsze jest pożądane. Istnieje kilka innych typowych pułapek, których należy unikać podczas zaokrąglania liczb w Pythonie:

  • Nieprawidłowe porównanie równości: Zaokrąglanie liczb często powoduje błędy zaokrąglania. Jeśli spróbujesz porównać równość zaokrąglonego wyniku z inną wartością, sprawdzenie równości zakończy się (prawie zawsze) niepowodzeniem ze względu na różną precyzję. Staraj się więc unikać sprawdzania równości między liczbami zmiennoprzecinkowymi i zaokrąglonymi liczbami zmiennoprzecinkowymi. Jeżeli konieczne jest porównanie, należy wprowadzić próg tolerancji.
  • Utrata informacji: możesz chcieć, aby pewne dane, takie jak odczyty czujników w różnych znacznikach czasu, były rejestrowane z dużą precyzją. Zaokrąglanie takich danych do mniejszej liczby miejsc po przecinku skutkuje utratą informacji i błędną analizą.
  • Zaokrąglanie wyników pośrednich: często w ramach obliczeń będziesz mieć wiele kroków. Zachowaj stałą precyzję na wszystkich etapach. Należy także unikać zaokrąglania na etapach pośrednich, aby zapobiec kumulowaniu się błędów zaokrągleń.

Najlepsze praktyki zaokrąglania liczb w Pythonie

Wymieńmy kilka najlepszych praktyk, których należy przestrzegać podczas zaokrąglania liczb w Pythonie:

  • Wybierz odpowiedni typ danych: Wybierz typ danych zmiennoprzecinkowy i dziesiętny, w zależności od aplikacji. Jeśli chcesz wykonać arytmetykę zmiennoprzecinkową z dużą precyzją, wybierz dziesiętny typ danych.
  • Używaj stałych poziomów precyzji: Ustaw spójne poziomy precyzji liczb dziesiętnych w całym programie, aby uniknąć nieoczekiwanych błędów zaokrągleń.
  • Techniki zaokrąglania dokumentów: W rzeczywistych zastosowaniach obejmujących dane, takie jak odczyty walut i czujników, ważne jest posiadanie spójnej i udokumentowanej techniki zaokrąglania.

Podsumowanie

Zakończmy samouczek krótkim przeglądem tego, czego się nauczyliśmy:

  • Możesz użyć wbudowanej funkcji round() z tą składnią round(num, ndigits). Korzystając z funkcji round(), należy zdawać sobie sprawę ze strategii zaokrąglania stosowanej przez bankiera. Zaokrągla więc liczby dokładnie z zakresu od dwóch liczb całkowitych do najbliższej parzystej liczby całkowitej.
  • Możesz użyć funkcji ceil() i Floor() z modułu matematycznego, aby odpowiednio zaokrąglić daną liczbę w górę i w dół do najbliższej liczby całkowitej.
  • Jeśli chcesz wykonać bardzo precyzyjną arytmetykę zmiennoprzecinkową, użyj modułu dziesiętnego. Liczby można zaokrąglać z wymaganą precyzją i strategią zaokrąglania.
  • Powinieneś zdawać sobie sprawę z typowych pułapek związanych z zaokrąglaniem liczb w Pythonie. Należą do nich utrata informacji w wyniku zaokrągleń, zaokrągleń wyników w krokach pośrednich i stosowania różnej precyzji w różnych częściach kodu.
  • Najlepsze praktyki obejmują wybór odpowiedniego typu danych w zależności od aplikacji i dokumentowanie stałych poziomów precyzji.

Następnie dowiedz się, jak wykonać podział pięter w Pythonie.

Czy ten artykuł był pomocny?

Dziękujemy za twoją opinię!