course
Att avrunda tal till två decimaler är en viktig teknik i Python. Det är särskilt användbart i finansiella beräkningar, datapresentation och vetenskaplig rapportering.
Python erbjuder flera metoder för exakt avrundning. I den här handledningen visar jag hur du avrundar ett tal till två decimaler i Python med inbyggda funktioner, bibliotek och formateringsmetoder.
Om du precis börjar som dataanalytiker rekommenderar jag DataCamps kurs Introduction to Python för att lära dig grunderna i Python för datamanipulation och -transformering. Du kommer också ha nytta av vår handledning om Python NumPy om du behöver avrunda stora arrayer av tal i dataanalysflöden.
TL;DR
-
Använd
round(number, 2)för aritmetisk avrundning — det ändrar det faktiska värdet. -
Använd
f"{number:.2f}"ellerstr.format()enbart för visning — det ursprungliga flyttalet förblir oförändrat. -
Använd modulen
decimalnär exakt decimalprecision krävs (t.ex. finansiella beräkningar). -
Använd
np.round(array, 2)för att avrunda en hel NumPy-array i ett anrop. -
Se upp för överraskningar med flyttalsprecision:
round(2.675, 2)returnerar2.67, inte2.68, på grund av hur flyttal lagras i minnet.
Förstå avrundning och decimaler
Decimaler avser siffrorna som står direkt efter decimaltecknet i ett tal. Decimalerna är viktiga eftersom de avgör talets precision. Ju fler decimaler, desto mer precist är det, och vice versa.
Att avrunda tal innebär att justera ett tal genom att minska antalet decimaler. Denna teknik används vanligtvis för att förenkla ett tal samtidigt som man behåller konsekvens i beräkningar. Att avrunda ett tal till ett visst antal decimaler påverkar dock noggrannheten i beräknade värden på grund av små fel som introduceras vid avrundning.
Python erbjuder olika metoder för att avrunda tal till två decimaler. Följande exempel ger detaljerade förklaringar av dessa tekniker.
Använda round() för att avrunda ett tal i Python
Funktionen round() är Pythons inbyggda funktion för att avrunda flyttal till angivet antal decimaler. Du kan ange antalet decimaler att avrunda till genom att ge ett värde som andra argumentet. Exemplet nedan skriver ut 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
Pythons round()-funktion använder "round half to even" som standardavrundningsläge när du utelämnar det andra argumentet. Round half to even (bankiravrundning) innebär att när ett tal ligger exakt mitt mellan två heltal, avrundas det till närmaste jämna heltal. Denna teknik är användbar eftersom den kan hjälpa till att minimera kumulativa avrundningsfel.
Fällor med flyttalsprecision i round()
Det finns en subtilitet som är värd att känna till innan du förlitar dig på round() i finansiell kod. Prova detta:
print(round(2.675, 2)) # You might expect 2.68
# Output: 2.67
Resultatet är 2.67, inte 2.68. Värdet 2.675 kan inte representeras exakt i binär flyttalsaritmetik (IEEE 754); det lagrade värdet är något mindre än 2.675, så Python avrundar nedåt.
Om du behöver exakt avrundning för finansiella beräkningar, använd modulen decimal med ett uttryckligt avrundningsläge:
from decimal import Decimal, ROUND_HALF_UP
result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result) # 2.68
Använda strängformatering för att avrunda ett tal i Python
Strängformatering är användbart för att avrunda tal till två decimaler, särskilt när talet ska visas i utdata.
Tänk på att när du använder strängformatering i Python för att avrunda ett tal, visas den avrundade utdata som en sträng, men det ursprungliga talet förblir oförändrat. Om du gör beräkningar på originaltalet baseras de på det oavrundade värdet, vilket kan ge oväntade resultat.
Avrunda med %-operatorn
%-operatorn erbjuder en traditionell metod för att formatera tal till två decimaler. %-operatorn gör det möjligt att skapa formaterade strängar genom att infoga värden i platshållare.
I exemplet nedan anger f att värdet är ett flyttal medan .2 anger antalet decimaler som talet ska avrundas till.
# 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
Avrunda med str.format()
Metoden str.format() ger ett mer flexibelt sätt att hantera komplexa formateringar. Eftersom den använder namngivna platshållare föredrar utvecklare ofta denna metod framför %-operatorn. I exemplet nedan används :.2f inom klamrarna för att ange att talet avrundas till två decimaler. Koden skriver ut 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
Avrunda med f-strings (Python 3.6+)
F-strings kom i Python 3.6 och är nu det föredragna sättet att bädda in värden i strängar. f-string-syntaxen är särskilt smidig för avrundning: du får visningsformatering på en rad utan separat anrop. Koden nedan skriver ut 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
Använda format() för att avrunda ett tal i Python
Den inbyggda funktionen format() tar ett värde och en format-spec och returnerar en formaterad sträng. Till skillnad från str.format() skickar du in talet direkt i stället för att bädda in det i en mallsträng. Koden nedan skriver ut 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
Använda andra moduler för att avrunda ett tal i Python
Utöver grundläggande Python finns det många andra moduler du kan använda för att avrunda tal i Python. Jag visar tre framträdande exempel: math, decimal och NumPy.
Avrunda med modulen math
Modulen math tillhandahåller inte funktioner som direkt avrundar tal till specifika decimaler. Du kan dock kombinera math-modulen och annan aritmetik för att avrunda ett tal till två decimaler.
Funktionen math.floor() används för att avrunda nedåt till närmaste heltal. För att avrunda nedåt till två decimaler multiplicerar du talet med 100, tillämpar funktionen math.floor() och dividerar med 100. Koden nedan skriver ut 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
På liknande sätt avrundar funktionen math.ceil() uppåt till närmaste heltal. För att avrunda uppåt till två decimaler multiplicerar du med 100, använder funktionen math.ceil() och dividerar med 100. Koden nedan skriver ut 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
Avrunda med modulen decimal
Modulen decimal i Python är användbar för att avrunda flyttal till exakta decimaler med metoden .quantize(). I exemplet nedan sätter vi precisionen till 0.01 för att ange att vi vill avrunda talet till två decimaler.
# 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
Om du letar efter specifikt avrundning uppåt, kolla in vår senaste handledning How to Round Up a Number in Python för att lära dig mer om att använda modulerna math och decimal, och andra tekniker för att se till att tal alltid avrundas uppåt i stället för nedåt. Om du vill förstå mer om datatransformering i allmänhet, gå igenom vår Data Analyst with Python-karriärväg för att utveckla dina analytiska färdigheter.
Avrunda med NumPy
När du arbetar med arrayer i NumPy, använd np.round() för att avrunda varje element på en gång. Detta är snabbare och mer lättläst än att loopa manuellt över värden.
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() tillämpar samma bankiravrundningsregel som Pythons inbyggda round(). Metoden .round() fungerar på samma sätt på pandas DataFrames och Series:
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
För en bredare översikt över datatransformering med pandas, se vår pandas-handledning.
När ska du använda vilken avrundningsmetod i Python?
Här är en snabbguide för att välja rätt avrundningssätt:
| Metod | Bäst för | Ändrar värde? | Returnerar |
|---|---|---|---|
round(x, 2) |
Allmän aritmetik | Ja | float |
f"{x:.2f}" |
Visning / utskrift | Nej | str |
str.format() |
Visning / utskrift | Nej | str |
% operator |
Visning / utskrift (äldre) | Nej | str |
format(x, ".2f") |
Visning / enstaka värde | Nej | str |
math.floor() / ceil() |
Alltid ner / alltid upp | Ja | float |
Decimal.quantize() |
Finansiellt / exakt decimal | Ja | Decimal |
np.round(arr, 2) |
NumPy-arrayer | Ja | ndarray |
Några tumregler som kan guida valet:
-
Ska du bara visa ett tal? Använd en f-string (
f"{x:.2f}"). En rad, inga imports, inga sidoeffekter på originalvärdet. -
Ska du räkna vidare med resultatet? Använd
round(x, 2). Det returnerar ett float som du kan fortsätta beräkna med. -
Finansiell eller redovisningskod? Använd
Decimal.quantize(). Överraskningar med flyttalsprecision (round(2.675, 2) == 2.67) inträffar inte med modulendecimal. -
Behöver du alltid gå upp eller alltid gå ner? Använd
math.ceil()ellermath.floor(). De bortser helt från vanliga avrundningsregler. -
Arbetar du med en NumPy-array eller en pandas-kolumn? Använd
np.round(arr, 2)ellerseries.round(2). Båda hanterar hela samlingen på en gång. -
Underhåller du gammal kod?
%-operatorn fungerar fortfarande, men f-strings ersatte den i Python 3.6 — föredra dessa i ny kod.
Avslutande tankar
Att avrunda tal till två decimaler är en viktig teknik för förbättrad precision i finansiella och vetenskapliga beräkningar. I den här artikeln har vi gått igenom olika metoder för att avrunda tal till två decimaler, inklusive inbyggda funktioner, strängformateringstekniker och modulen math. Det är viktigt att förstå och välja lämplig metod utifrån specifika krav, såsom precision och formateringsstil. Jag uppmuntrar dig att öva på de olika metoderna med olika exempel för att bättre förstå vad som passar bäst för dina användningsfall.
Om du vill ta dina Python-kunskaper vidare, kolla in vår färdighetsväg Python Programming, som täcker funktioner, dekoratörer och avancerade Pythonmönster. Vår karriärväg Python Developer är också utformad för att hjälpa dig att utvecklas som utvecklare samtidigt som du lär dig mer avancerade datastrukturer och algoritmer.
Vanliga frågor
Vad är det enklaste sättet att avrunda ett tal till två decimaler i Python?
Det enklaste sättet att avrunda ett tal till två decimaler är att använda den inbyggda funktionen round().
Varför avrundas ett tal till närmaste heltal när man använder funktionen round()?
Funktionen round() har som standardmetod round half to even. För att avrunda ett tal till två decimaler måste du ange det andra argumentet som 2 i funktionen, dvs. round(3.14159, 2).
Hur används funktionen format() för att avrunda ett tal till två decimaler?
Funktionen format() används för att avrunda ett tal till angivet antal decimaler och visa det i en formaterad sträng.
Vad är round half to even?
Metoden rounding half to even, eller bankiravrundning, innebär att ett tal som ligger exakt mitt mellan två heltal avrundas till det närmaste jämna heltalet.
Tillhandahåller modulen math avrundning av ett tal till två decimaler i Python?
Du kan bara använda funktionerna math.floor() och math.ceil() tillsammans med annan aritmetik för att avrunda ett tal till ett angivet antal decimaler.
Varför returnerar round(2.675, 2) 2.67 i stället för 2.68?
Detta är ett problem med flyttalsprecision. Värdet 2.675 kan inte representeras exakt i binär flyttalsaritmetik (IEEE 754); det lagrade värdet är något mindre än 2.675, så Python avrundar nedåt till 2.67.
För att undvika detta i finansiell kod, använd modulen decimal med ett uttryckligt avrundningsläge: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) returnerar 2.68 som förväntat.
Hur avrundar jag alla värden i en pandas-DataFrame till 2 decimaler?
Använd metoden .round() på en DataFrame eller Series. För att avrunda en enskild kolumn: df["price"] = df["price"].round(2). För att avrunda alla numeriska kolumner på en gång: df = df.round(2).