Courses
Làm tròn số đến hai chữ số thập phân là một kỹ thuật quan trọng trong Python. Điều này đặc biệt hữu ích trong các phép tính tài chính, trình bày dữ liệu và báo cáo khoa học.
Python cung cấp nhiều phương pháp để làm tròn chính xác. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách làm tròn một số đến hai chữ số thập phân trong Python bằng các hàm tích hợp, thư viện và phương pháp định dạng.
Nếu bạn mới bắt đầu với vai trò nhà phân tích dữ liệu, tôi khuyên bạn nên học khóa Introduction to Python của DataCamp để nắm vững những kiến thức cơ bản về Python cho thao tác và chuyển đổi dữ liệu. Bạn cũng sẽ thấy hướng dẫn Python NumPy của chúng tôi hữu ích nếu bạn cần làm tròn các mảng số lớn trong quy trình phân tích dữ liệu.
Tóm tắt nhanh
-
Dùng
round(number, 2)cho làm tròn số học — nó thay đổi giá trị thực. -
Dùng
f"{number:.2f}"hoặcstr.format()chỉ để hiển thị — số float gốc không thay đổi. -
Dùng mô-đun
decimalkhi cần độ chính xác thập phân tuyệt đối (ví dụ: tính toán tài chính). -
Dùng
np.round(array, 2)để làm tròn toàn bộ mảng NumPy trong một lần gọi. -
Lưu ý các bất ngờ về độ chính xác số float:
round(2.675, 2)trả về2.67, không phải2.68, do cách số float được lưu trữ trong bộ nhớ.
Hiểu về làm tròn và chữ số thập phân
Chữ số thập phân là các con số xuất hiện ngay sau dấu chấm thập phân của một số. Chúng quan trọng vì quyết định độ chính xác của số đó. Càng nhiều chữ số thập phân thì càng chính xác, và ngược lại.
Làm tròn số là điều chỉnh một số bằng cách giảm số lượng chữ số thập phân. Kỹ thuật này thường được dùng để đơn giản hóa số liệu đồng thời giữ tính nhất quán trong các phép tính. Tuy nhiên, làm tròn đến một số chữ số thập phân cụ thể sẽ ảnh hưởng đến độ chính xác của kết quả do xuất hiện các sai số nhỏ trong quá trình làm tròn.
Python cung cấp nhiều phương pháp để làm tròn số về hai chữ số thập phân. Các ví dụ sau đây cung cấp giải thích chi tiết về những kỹ thuật này.
Dùng round() để làm tròn một số trong Python
Hàm round() là hàm tích hợp của Python để làm tròn số dấu phẩy động đến số chữ số thập phân chỉ định. Bạn có thể chỉ định số chữ số thập phân bằng đối số thứ hai. Ví dụ dưới đây in ra 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
Hàm round() của Python dùng "làm tròn nửa về chẵn" làm chế độ mặc định khi bạn bỏ qua đối số thứ hai. Làm tròn nửa về chẵn (bankers’ rounding) nghĩa là khi một số nằm chính giữa hai số nguyên, nó sẽ được làm tròn về số nguyên chẵn gần nhất. Kỹ thuật này hữu ích vì giúp giảm thiểu sai số cộng dồn do làm tròn.
Mẹo lưu ý về độ chính xác float với round()
Có một điểm tinh tế bạn nên biết trước khi dựa vào round() trong mã tài chính. Hãy thử:
print(round(2.675, 2)) # You might expect 2.68
# Output: 2.67
Kết quả là 2.67, không phải 2.68. Giá trị 2.675 không thể được biểu diễn chính xác trong số dấu phẩy động nhị phân (IEEE 754); giá trị lưu trữ nhỏ hơn 2.675 một chút, nên Python làm tròn xuống.
Nếu bạn cần làm tròn chính xác cho tính toán tài chính, hãy dùng mô-đun decimal với chế độ làm tròn rõ ràng:
from decimal import Decimal, ROUND_HALF_UP
result = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(result) # 2.68
Dùng kỹ thuật định dạng chuỗi để làm tròn số trong Python
Các kỹ thuật định dạng chuỗi rất hữu ích để làm tròn số đến hai chữ số thập phân, đặc biệt khi hiển thị số trong đầu ra.
Lưu ý rằng khi bạn dùng các kỹ thuật định dạng chuỗi trong Python để làm tròn, kết quả làm tròn được hiển thị dưới dạng chuỗi, nhưng số gốc vẫn không đổi. Nếu bạn tiếp tục tính toán với số gốc, các phép toán sẽ dựa trên giá trị chưa làm tròn, có thể dẫn đến kết quả bất ngờ.
Làm tròn với toán tử %
Toán tử % cung cấp một cách truyền thống để định dạng số thành hai chữ số thập phân. Toán tử % cho phép tạo chuỗi định dạng bằng cách chèn giá trị vào các chỗ trống.
Trong ví dụ dưới đây, f cho biết giá trị là số dấu phẩy động, còn .2 chỉ số chữ số thập phân để làm tròn.
# 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
Làm tròn với str.format()
Phương thức str.format() cung cấp cách linh hoạt hơn để xử lý các kỹ thuật làm tròn phức tạp. Vì dùng các chỗ trống có tên, các lập trình viên thường ưa thích phương pháp này hơn toán tử %. Trong ví dụ dưới đây, :.2f được dùng trong ngoặc nhọn để chỉ rằng số được làm tròn đến hai chữ số thập phân. Mã sẽ in ra 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
Làm tròn với f-strings (Python 3.6+)
F-string xuất hiện từ Python 3.6 và nay là cách được ưa chuộng để nhúng giá trị vào chuỗi. Cú pháp f-string đặc biệt gọn khi làm tròn: bạn có định dạng hiển thị trong một dòng mà không cần lời gọi riêng. Mã dưới đây in ra 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
Dùng format() để làm tròn một số trong Python
Hàm tích hợp format() nhận một giá trị và một đặc tả định dạng rồi trả về một chuỗi đã định dạng. Khác với str.format(), bạn truyền số trực tiếp thay vì nhúng nó vào một chuỗi mẫu. Mã dưới đây in ra 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
Dùng các mô-đun khác để làm tròn số trong Python
Ngoài Python cơ bản, có nhiều mô-đun khác bạn có thể dùng để làm tròn số. Tôi sẽ giới thiệu ba ví dụ tiêu biểu: math, decimal và NumPy.
Làm tròn với mô-đun math
Mô-đun math không cung cấp các hàm làm tròn trực tiếp đến số chữ số thập phân cụ thể. Tuy nhiên, bạn có thể kết hợp mô-đun math và phép toán khác để làm tròn số đến hai chữ số thập phân.
Hàm math.floor() dùng để làm tròn xuống đến số nguyên gần nhất. Để làm tròn xuống đến hai chữ số thập phân, bạn nhân số đó với 100, áp dụng math.floor(), rồi chia cho 100. Mã dưới đây in ra 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
Tương tự, hàm math.ceil() làm tròn lên đến số nguyên gần nhất. Để làm tròn lên đến hai chữ số thập phân, hãy nhân số với 100, áp dụng math.ceil(), rồi chia cho 100. Mã dưới đây in ra 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
Làm tròn với mô-đun decimal
Mô-đun decimal trong Python hữu ích để làm tròn số float đến số chữ số thập phân chính xác bằng phương thức .quantize(). Trong ví dụ dưới đây, chúng ta đặt độ chính xác là 0.01 để chỉ rằng muốn làm tròn số đến hai chữ số thập phân.
# 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
Nếu bạn đang tìm cách luôn làm tròn lên, hãy xem hướng dẫn mới nhất của chúng tôi về Cách làm tròn lên một số trong Python để tìm hiểu thêm về việc dùng các mô-đun math và decimal, cùng các kỹ thuật khác để đảm bảo số luôn được làm tròn lên thay vì xuống. Nếu bạn muốn hiểu thêm về chuyển đổi dữ liệu nói chung, hãy theo học lộ trình nghề nghiệp Data Analyst with Python để phát triển kỹ năng phân tích.
Làm tròn với NumPy
Khi làm việc với mảng trong NumPy, hãy dùng np.round() để làm tròn tất cả phần tử cùng lúc. Cách này nhanh hơn và dễ đọc hơn so với lặp thủ công qua từng giá trị.
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() áp dụng cùng quy tắc làm tròn nửa về chẵn như round() tích hợp của Python. Phương thức .round() hoạt động tương tự trên DataFrame và Series của 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
Để có cái nhìn rộng hơn về chuyển đổi dữ liệu với pandas, xem hướng dẫn pandas của chúng tôi.
Khi nào nên dùng từng phương pháp làm tròn trong Python
Dưới đây là tham chiếu nhanh để chọn cách làm tròn phù hợp:
| Phương pháp | Phù hợp nhất cho | Có thay đổi giá trị? | Kiểu trả về |
|---|---|---|---|
round(x, 2) |
Số học tổng quát | Có | float |
f"{x:.2f}" |
Hiển thị / in | Không | str |
str.format() |
Hiển thị / in | Không | str |
% operator |
Hiển thị / in (cũ) | Không | str |
format(x, ".2f") |
Hiển thị / giá trị đơn | Không | str |
math.floor() / ceil() |
Luôn làm tròn xuống / lên | Có | float |
Decimal.quantize() |
Tài chính / thập phân chính xác | Có | Decimal |
np.round(arr, 2) |
Mảng NumPy | Có | ndarray |
Một vài quy tắc kinh nghiệm để định hướng lựa chọn:
-
Chỉ cần hiển thị số? Dùng f-string (
f"{x:.2f}"). Một dòng, không import, không ảnh hưởng giá trị gốc. -
Cần tiếp tục tính toán với kết quả? Dùng
round(x, 2). Nó trả về một float để bạn tiếp tục tính toán. -
Mã tài chính hoặc kế toán? Dùng
Decimal.quantize(). Những bất ngờ về độ chính xác float (round(2.675, 2) == 2.67) sẽ không xảy ra với mô-đundecimal. -
Cần luôn làm tròn lên hoặc luôn làm tròn xuống? Dùng
math.ceil()hoặcmath.floor(). Chúng bỏ qua hoàn toàn các quy tắc làm tròn thông thường. -
Làm việc với mảng NumPy hoặc cột pandas? Dùng
np.round(arr, 2)hoặcseries.round(2). Cả hai đều xử lý toàn bộ tập hợp cùng lúc. -
Bảo trì mã cũ? Toán tử
%vẫn hoạt động, nhưng f-strings đã thay thế từ Python 3.6 — nên ưu tiên dùng trong mã mới.
Lời kết
Làm tròn số đến hai chữ số thập phân là kỹ thuật quan trọng để cải thiện độ chính xác trong các phép tính tài chính và khoa học. Bài viết đã thảo luận các phương pháp làm tròn khác nhau, bao gồm hàm tích hợp, kỹ thuật định dạng chuỗi và mô-đun math. Việc hiểu và chọn đúng phương pháp dựa trên yêu cầu cụ thể, như độ chính xác và kiểu định dạng, là rất quan trọng. Tôi khuyến khích bạn thực hành các phương pháp này với nhiều ví dụ khác nhau để hiểu rõ phương án phù hợp nhất cho trường hợp sử dụng của mình.
Nếu bạn muốn nâng cao kỹ năng Python, hãy xem lộ trình kỹ năng Python Programming của chúng tôi, bao gồm hàm, decorator và các mẫu Python nâng cao. Lộ trình nghề nghiệp Python Developer cũng được thiết kế để giúp bạn nâng cấp kỹ năng lập trình trong khi học thêm về cấu trúc dữ liệu và thuật toán nâng cao.
Frequently Asked Questions
Cách đơn giản nhất để làm tròn số đến hai chữ số thập phân trong Python là gì?
Cách đơn giản nhất để làm tròn số đến hai chữ số thập phân là dùng hàm tích hợp round().
Vì sao một số lại được làm tròn về số nguyên gần nhất khi dùng hàm round()?
Phương thức mặc định của hàm round() là làm tròn nửa về chẵn. Để làm tròn số đến hai chữ số thập phân, bạn phải truyền đối số thứ hai là 2 cho hàm, tức là round(3.14159, 2).
Hàm format() được dùng như thế nào để làm tròn số đến hai chữ số thập phân?
Hàm format() được dùng để làm tròn số đến số chữ số thập phân chỉ định và hiển thị trong một chuỗi đã định dạng.
Làm tròn nửa về chẵn là gì?
Phương pháp làm tròn nửa về chẵn hay bankers’ rounding là làm tròn một số nằm chính giữa hai số nguyên về số nguyên chẵn gần nhất.
Mô-đun math có cung cấp làm tròn số đến hai chữ số thập phân trong Python không?
Bạn chỉ có thể dùng các hàm math.floor() và math.ceil() kết hợp với phép toán khác để làm tròn số đến số chữ số thập phân mong muốn.
Tại sao round(2.675, 2) trả về 2.67 thay vì 2.68?
Đây là vấn đề về độ chính xác của số dấu phẩy động. Giá trị 2.675 không thể biểu diễn chính xác trong số dấu phẩy động nhị phân (IEEE 754); giá trị lưu trữ nhỏ hơn 2.675 một chút, nên Python làm tròn xuống thành 2.67.
Để tránh điều này trong mã tài chính, hãy dùng mô-đun decimal với chế độ làm tròn rõ ràng: Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) trả về 2.68 như mong đợi.
Làm thế nào để làm tròn tất cả giá trị trong một DataFrame pandas đến 2 chữ số thập phân?
Dùng phương thức .round() trên DataFrame hoặc Series. Để làm tròn một cột: df["price"] = df["price"].round(2). Để làm tròn tất cả các cột dạng số cùng lúc: df = df.round(2).
