course
Zaokrąglanie liczb do dwóch miejsc po przecinku to ważna technika w Pythonie. Jest szczególnie przydatna w obliczeniach finansowych, prezentacji danych i raportowaniu naukowym.
Python zapewnia szereg metod do precyzyjnego zaokrąglania. W tym samouczku pokażę ci, jak zaokrąglić liczbę do dwóch miejsc po przecinku w Pythonie, korzystając z wbudowanych funkcji, bibliotek i metod formatowania.
Jeśli dopiero zaczynasz jako analityk danych, polecam kurs DataCamp Introduction to Python, aby poznać podstawy Pythona do manipulacji i przekształcania danych. Przyda ci się też nasz samouczek Python NumPy, jeśli musisz zaokrąglać duże tablice liczb w przepływach pracy analizy danych.
TL;DR
-
Użyj
round(number, 2)do arytmetycznego zaokrąglania — zmienia ono rzeczywistą wartość. -
Użyj
f"{number:.2f}"lubstr.format()tylko do wyświetlania — oryginalny float pozostaje bez zmian. -
Użyj modułu
decimal, gdy wymagana jest dokładna precyzja dziesiętna (np. obliczenia finansowe). -
Użyj
np.round(array, 2), aby zaokrąglić całą tablicę NumPy jednym wywołaniem. -
Uważaj na niespodzianki z precyzją float:
round(2.675, 2)zwraca2.67, a nie2.68, z powodu sposobu przechowywania liczb zmiennoprzecinkowych w pamięci.
Zrozumieć zaokrąglanie i miejsca po przecinku
Miejsca po przecinku to cyfry występujące bezpośrednio po kropce dziesiętnej w liczbie. Są istotne, ponieważ określają precyzję liczby. Im więcej miejsc po przecinku, tym większa precyzja i odwrotnie.
Zaokrąglanie liczb polega na dostosowaniu liczby poprzez zmniejszenie liczby miejsc po przecinku. Technika ta zwykle służy do uproszczenia liczby przy zachowaniu spójności obliczeń. Mimo to zaokrąglanie do określonej liczby miejsc wpływa na dokładność wyników ze względu na wprowadzane podczas zaokrąglania drobne błędy.
Python udostępnia różne metody zaokrąglania liczb do dwóch miejsc po przecinku. Poniższe przykłady szczegółowo wyjaśniają te techniki.
Użycie round() do zaokrąglania liczby w Pythonie
Funkcja round() to wbudowana funkcja Pythona do zaokrąglania liczb zmiennoprzecinkowych do wskazanej liczby miejsc po przecinku. Liczbę miejsc określasz, podając wartość jako drugi argument. Poniższy przykład wypisze 34.15.
# Example number to be rounded
number = 34.14559
# Rounding the number to 2 decimal places
rounded_number = round(number, 2)
print(rounded_number)
# 34.15
Funkcja round() w Pythonie używa trybu „round half to even” jako domyślnego, gdy pominiesz drugi argument. Round half to even (zaokrąglanie bankierskie) oznacza, że gdy liczba leży dokładnie w połowie między dwiema liczbami całkowitymi, jest zaokrąglana do najbliższej parzystej. Technika ta pomaga minimalizować skumulowane błędy zaokrągleń.
Pułapka precyzji float z round()
Jest jedna subtelność, o której warto wiedzieć, zanim oprzesz kod finansowy na round(). Spróbuj tego:
print(round(2.675, 2)) # You might expect 2.68
# Output: 2.67
Wynik to 2.67, a nie 2.68. Wartość 2.675 nie może być dokładnie reprezentowana w binarnym formacie zmiennoprzecinkowym (IEEE 754); przechowywana wartość jest nieco mniejsza niż 2.675, więc Python zaokrągla w dół.
Jeśli potrzebujesz dokładnego zaokrąglania do zastosowań finansowych, użyj modułu decimal z jawnie ustawionym trybem zaokrąglania:
from decimal import Decimal, ROUND_HALF_UP
result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result) # 2.68
Używanie technik formatowania łańcuchów do zaokrąglania w Pythonie
Techniki formatowania łańcuchów są przydatne do zaokrąglania liczb do dwóch miejsc po przecinku, zwłaszcza podczas wyświetlania wyniku.
Pamiętaj, że gdy używasz w Pythonie technik formatowania łańcuchów do zaokrąglania liczby, wynik jest wyświetlany jako łańcuch znaków, ale oryginalna liczba pozostaje bez zmian. Jeśli wykonasz obliczenia na oryginalnej liczbie, będą one oparte na niezaokrąglonej wartości, co może prowadzić do zaskakujących rezultatów.
Zaokrąglanie z operatorem %
Operator % oferuje tradycyjny sposób formatowania liczb do dwóch miejsc po przecinku. Pozwala tworzyć sformatowane łańcuchy poprzez wstawianie wartości w miejsca zastępcze.
W przykładzie poniżej f wskazuje, że to liczba zmiennoprzecinkowa, a .2 określa liczbę miejsc po przecinku.
# Example number to be rounded
number = 3.14159
# Using the % operator to round to 2 decimal places
formatted_number = "%.2f" % number
print(formatted_number)
# 3.14
Zaokrąglanie z użyciem str.format()
Metoda str.format() zapewnia bardziej elastyczny sposób obsługi złożonych technik zaokrąglania. Ponieważ używa nazwanych pól, deweloperzy często wolą ją od operatora %. W przykładzie poniżej wewnątrz nawiasów klamrowych użyto :.2f, aby określić, że liczba ma być zaokrąglona do dwóch miejsc po przecinku. Kod wypisze 3.14.
# Example number to be rounded
number = 3.14159
# Using str.format() to round to 2 decimal places
formatted_number = "{:.2f}".format(number)
print(formatted_number)
# 3.14
Zaokrąglanie z użyciem f-stringów (Python 3.6+)
F-stringi pojawiły się w Pythonie 3.6 i są obecnie preferowanym sposobem osadzania wartości w łańcuchach. Składnia f-stringów jest wyjątkowo zwięzła przy zaokrąglaniu: otrzymujesz formatowanie wyświetlania w jednej linii bez osobnego wywołania. Poniższy kod wypisze 14.68.
# Example number to be rounded
number = 14.67856
# Using f-strings to round to 2 decimal places
formatted_number = f"{number:.2f}"
print(formatted_number)
# 14.68
Użycie format() do zaokrąglania liczby w Pythonie
Wbudowana funkcja format() przyjmuje wartość i specyfikację formatu, a zwraca sformatowany łańcuch. W przeciwieństwie do str.format(), przekazujesz liczbę bezpośrednio, zamiast osadzać ją w szablonie. Poniższy kod wypisze 345.69.
# Example number to be rounded
number = 345.68776
# Using the built-in format() to round to 2 decimal places
formatted_number = format(number, ".2f")
print(formatted_number)
# 345.69
Użycie innych modułów do zaokrąglania liczb w Pythonie
Poza podstawowym Pythonem istnieje wiele innych modułów, których możesz użyć do zaokrąglania liczb. Pokażę trzy najważniejsze przykłady: math, decimal i NumPy.
Zaokrąglanie z użyciem modułu math
Moduł math nie zapewnia funkcji, które bezpośrednio zaokrąglają liczby do określonej liczby miejsc po przecinku. Możesz jednak połączyć math z arytmetyką, aby zaokrąglić liczbę do dwóch miejsc po przecinku.
Funkcja math.floor() służy do zaokrąglania w dół do najbliższej liczby całkowitej. Aby zaokrąglić w dół do dwóch miejsc po przecinku, pomnóż liczbę przez 100, zastosuj math.floor(), a następnie podziel przez 100. Poniższy kod wypisze 3.14.
# Import math module
import math
# Example number to be rounded
number = 3.14159
# Using math.floor() to round down to 2 decimal places
rounded_down = math.floor(number * 100) / 100
print(rounded_down)
# 3.14
Podobnie, funkcja math.ceil() zaokrągla w górę do najbliższej liczby całkowitej. Aby zaokrąglić w górę do dwóch miejsc po przecinku, pomnóż liczbę przez 100, zastosuj math.ceil(), a następnie podziel przez 100. Poniższy kod wypisze 3.15.
# Import the math module
import math
# Example number to be rounded
number = 3.14159
# Using math.ceil() to round up to 2 decimal places
rounded_up = math.ceil(number * 100) / 100
print(rounded_up)
# 3.15
Zaokrąglanie z użyciem modułu decimal
Moduł decimal w Pythonie jest przydatny do zaokrąglania liczb zmiennoprzecinkowych do precyzyjnej liczby miejsc po przecinku przy użyciu metody .quantize(). W przykładzie poniżej ustawiamy precyzję na 0.01, aby wskazać, że chcemy zaokrąglić liczbę do dwóch miejsc po przecinku.
# Import the decimal module
from decimal import Decimal
# Example number to be rounded
number = Decimal("18.73869")
# Define the rounding precision to 2 decimal places
precision = Decimal('0.01')
# Using the quantize method with ROUND_UP
# to round the number up to 2 decimal places
rounded_number = number.quantize(precision)
print(rounded_number)
# 18.74
Jeśli zależy ci na zawsze zaokrąglaniu w górę, zobacz nasz najnowszy samouczek How to Round Up a Number in Python, aby dowiedzieć się więcej o używaniu modułów math i decimal oraz innych technikach, które zapewniają zaokrąglanie w górę, a nie w dół. Jeśli chcesz szerzej zrozumieć transformacje danych, przejdź naszą ścieżkę kariery Data Analyst with Python, by rozwinąć umiejętności analityczne.
Zaokrąglanie z użyciem NumPy
Pracując z tablicami w NumPy, użyj np.round(), aby zaokrąglić wszystkie elementy na raz. To szybsze i czytelniejsze niż ręczne iterowanie po wartościach.
import numpy as np
prices = np.array([1.2345, 9.8765, 3.14159])
rounded_prices = np.round(prices, 2)
print(rounded_prices)
# [1.23 9.88 3.14]
np.round() stosuje tę samą zasadę zaokrąglania bankierskiego co wbudowana funkcja round() w Pythonie. Metoda .round() działa tak samo na obiektach DataFrame i Series w pandas:
import pandas as pd
df = pd.DataFrame({"price": [1.2345, 9.8765, 3.14159]})
df["price_rounded"] = df["price"].round(2)
print(df)
# price price_rounded
# 0 1.2345 1.23
# 1 9.8765 9.88
# 2 3.14159 3.14
Szerzej o transformacjach danych w pandas przeczytasz w naszym samouczku pandas.
Kiedy używać której metody zaokrąglania w Pythonie
Oto szybka ściągawka ułatwiająca wybór właściwego podejścia:
| Metoda | Najlepsza do | Czy zmienia wartość? | Zwraca |
|---|---|---|---|
round(x, 2) |
Ogólna arytmetyka | Tak | float |
f"{x:.2f}" |
Wyświetlanie / druk | Nie | str |
str.format() |
Wyświetlanie / druk | Nie | str |
% operator |
Wyświetlanie / druk (legacy) | Nie | str |
format(x, ".2f") |
Wyświetlanie / pojedyncza wartość | Nie | str |
math.floor() / ceil() |
Zawsze w dół / zawsze w górę | Tak | float |
Decimal.quantize() |
Finanse / dokładne dziesiętne | Tak | Decimal |
np.round(arr, 2) |
Tablice NumPy | Tak | ndarray |
Kilka praktycznych wskazówek ułatwiających wybór:
-
Tylko wyświetlasz liczbę? Użyj f-stringa (
f"{x:.2f}"). Jedna linia, bez importów, bez skutków ubocznych dla oryginalnej wartości. -
Wykonujesz obliczenia na wyniku? Użyj
round(x, 2). Zwraca float, na którym możesz dalej liczyć. -
Kod finansowy lub księgowy? Użyj
Decimal.quantize(). Niespodzianki z precyzją float (round(2.675, 2) == 2.67) nie występują z modułemdecimal. -
Musisz zawsze iść w górę lub zawsze w dół? Użyj
math.ceil()lubmath.floor(). Całkowicie ignorują standardowe zasady zaokrąglania. -
Pracujesz z tablicą NumPy lub kolumną pandas? Użyj
np.round(arr, 2)lubseries.round(2). Obie metody obsługują całą kolekcję naraz. -
Utrzymujesz stary kod? Operator
%nadal działa, ale w Pythonie 3.6 zastąpiły go f-stringi — w nowym kodzie preferuj je.
Na koniec
Zaokrąglanie liczb do dwóch miejsc po przecinku to ważna technika poprawiająca precyzję w obliczeniach finansowych i naukowych. W tym artykule omówiliśmy różne metody zaokrąglania do dwóch miejsc po przecinku, w tym funkcje wbudowane, techniki formatowania łańcuchów i moduł math. Kluczowe jest zrozumienie i wybór odpowiedniej metody w zależności od wymagań, takich jak precyzja i styl formatowania. Zachęcam cię do przećwiczenia różnych metod na różnych przykładach, aby lepiej dopasować je do swoich zastosowań.
Jeśli chcesz rozwijać umiejętności w Pythonie, sprawdź naszą ścieżkę umiejętności Python Programming, która obejmuje funkcje, dekoratory i zaawansowane wzorce Pythona. Nasza ścieżka kariery Python Developer także pomoże ci rozwinąć się jako deweloper, poznając bardziej zaawansowane struktury danych i algorytmy.
Najczęściej zadawane pytania
Jaki jest najprostszy sposób na zaokrąglenie liczby do dwóch miejsc po przecinku w Pythonie?
Najprostszym sposobem zaokrąglenia liczby do dwóch miejsc po przecinku jest użycie wbudowanej funkcji round().
Dlaczego liczba jest zaokrąglana do najbliższej liczby całkowitej przy użyciu funkcji round()?
Domyślny sposób działania funkcji round() to round half to even. Aby zaokrąglić liczbę do dwóch miejsc po przecinku, musisz podać drugi argument równy 2, czyli round(3.14159, 2).
Jak użyć funkcji format() do zaokrąglenia liczby do dwóch miejsc po przecinku?
Funkcja format() służy do zaokrąglenia liczby do określonej liczby miejsc po przecinku i wyświetlenia jej w sformatowanym łańcuchu.
Czym jest round half to even?
Metoda round half to even, czyli zaokrąglanie bankierskie, polega na zaokrągleniu liczby leżącej dokładnie w połowie między dwiema liczbami całkowitymi do najbliższej parzystej.
Czy moduł math umożliwia zaokrąglanie liczby do dwóch miejsc po przecinku w Pythonie?
Funkcji math.floor() i math.ceil() możesz używać tylko w połączeniu z inną arytmetyką, aby zaokrąglić liczbę do określonej liczby miejsc po przecinku.
Dlaczego round(2.675, 2) zwraca 2.67 zamiast 2.68?
To kwestia precyzji liczb zmiennoprzecinkowych. Wartość 2.675 nie może być dokładnie reprezentowana w binarnym formacie zmiennoprzecinkowym (IEEE 754); przechowywana wartość jest nieco mniejsza niż 2.675, więc Python zaokrągla w dół do 2.67.
Aby tego uniknąć w kodzie finansowym, użyj modułu decimal z jawnym trybem zaokrąglania: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) zwraca 2.68, zgodnie z oczekiwaniem.
Jak zaokrąglić wszystkie wartości w pandas DataFrame do 2 miejsc po przecinku?
Użyj metody .round() na DataFrame lub Series. Aby zaokrąglić pojedynczą kolumnę: df["price"] = df["price"].round(2). Aby zaokrąglić wszystkie kolumny numeryczne naraz: df = df.round(2).