Chuyển đến nội dung chính

Cách làm tròn lên một số trong Python

Khám phá ba kỹ thuật đơn giản để làm tròn lên trong Python: dùng math.ceil() từ mô-đun math, dùng mô-đun decimal và NumPy.
· 7 phút đọc

Khám phá cùng AI

Là một ngôn ngữ lập trình cực kỳ linh hoạt, Python cung cấp nhiều kỹ thuật khác nhau để làm tròn lên và làm tròn nói chung. Làm tròn lên là một kỹ thuật lập trình cần biết, đặc biệt với những người làm trong tài chính hoặc thống kê. Các phương pháp dưới đây về cơ bản tương tự nhau cho nhiều ứng dụng thực tế, nhưng vẫn có những khác biệt tinh tế và quan trọng. Trong bài viết này, tôi sẽ giới thiệu một số cách để làm tròn lên số và sau đó bàn về sự khác nhau giữa chúng. 

Nếu bạn đang hướng tới vai trò nhà phân tích dữ liệu hoặc nhà khoa học dữ liệu, tôi rất khuyến nghị khóa Giới thiệu về Python của DataCamp để khởi đầu thuận lợi với lập trình Python. Phiếu gian lận Python cho người mới bắt đầu cũng sẽ là tài liệu tham khảo hữu ích.

Câu trả lời nhanh: Cách làm tròn lên trong Python

Hàm math.ceil() từ mô-đun math là một cách đơn giản để làm tròn lên một số trong Python. Kỹ thuật này đảm bảo số luôn được làm tròn lên đến số nguyên kế tiếp lớn hơn số gốc. Đoạn mã sau in ra 4.

# Import the math module to access math.ceil() function
import math
number = 3.14
rounded_up = math.ceil(number)
print(rounded_up)

Hiểu những điều cơ bản về làm tròn lên

Làm tròn lên liên quan đến việc điều chỉnh các chữ số để cho một giá trị xấp xỉ. Khái niệm này rất quan trọng để đơn giản hóa số, giúp chúng dễ làm việc hơn. Các trường hợp sử dụng phổ biến của làm tròn lên bao gồm:

  • Tính toán tài chính: Làm tròn lên thường được dùng trong các phép tính tài chính để đảm bảo ước tính thận trọng. Ví dụ, khi tính lãi suất hoặc thuế, làm tròn lên đến xu gần nhất giúp tránh đánh giá thấp giá trị.
  • Phân tích dữ liệu và thống kê: Báo cáo dữ liệu thường tuân theo các quy ước cụ thể như ghi nhãn khoảng tin cậy và báo cáo p-value. Điều này là vì độ chính xác không cần thiết có thể gây xao nhãng. 
  • Lập trình và thuật toán: Các hàm làm tròn được dùng để kiểm soát mức độ chính xác trong tính toán, điều này có thể quan trọng cho hiệu năng và tránh lỗi số thực dấu chấm động.

Cần nhớ rằng nếu bạn làm tròn số trước khi thực hiện phép tính, bạn sẽ thay đổi kết quả, và đôi khi thay đổi đó lớn hơn hoặc gây bất ngờ hơn bạn nghĩ. Vì làm tròn lên là điều chỉnh số về giá trị xấp xỉ, sai số sẽ tích lũy, đặc biệt khi xử lý các tập dữ liệu lớn. Nếu bạn làm tròn lên tất cả các số trước khi nhân, kết quả có khả năng cao hơn so với khi bạn dùng số gốc. Đó là vì mỗi số hơi lớn hơn sẽ làm tăng tích tổng thể. 

Mặt khác, nếu bạn làm tròn lên tất cả các số trước khi chia, tác động có thể khác nhau tùy thuộc vào việc làm tròn lên xảy ra ở số bị chia hay số chia. Dù trong trường hợp nào, làm tròn lên trước khi thực hiện các phép toán có thể ảnh hưởng kết quả theo những cách có thể khiến bạn bất ngờ nếu không cẩn trọng. 

Các phương pháp làm tròn lên một số trong Python

Python sử dụng mô-đun math, cùng các thư viện NumPy và Pandas để cung cấp nhiều cách làm tròn lên.

Làm tròn lên với mô-đun math

Hàm math.ceil() từ math dùng để làm tròn lên một số tới số nguyên gần nhất. Cú pháp như dưới đây.

# Import the math module to access math.ceil() function
import math
math.ceil(number)

Khi làm tròn lên một số dương bằng math.ceil(), đầu ra là một số nguyên lớn hơn số ban đầu. Đoạn mã sau in ra 4.

# Import the math module to access math.ceil() function
import math
number = 3.14
rounded_up = math.ceil(number)
print(rounded_up)

Tương tự, khi làm tròn lên số âm, hàm math.ceil() trả về một số nguyên âm lớn hơn giá trị gốc. Đoạn mã sau in ra -3.

# Import the math module to access math.ceil() function
import math
number = -3.14
rounded_up = math.ceil(number)
print(rounded_up)

Làm tròn lên bằng mô-đun decimal để có độ chính xác

Mô-đun decimal trong Python hữu ích để làm tròn số float tới số chữ số thập phân chính xác. Điều này quan trọng để đạt được việc làm tròn thập phân chuẩn xác, đặc biệt trong tính toán tài chính.

Bạn có thể dùng mô-đun decimal để tạo đối tượng Decimal từ chuỗi, số nguyên và số thực dấu chấm động. Tuy nhiên, không khuyến nghị tạo Decimal từ số thực dấu chấm động do có thể gặp vấn đề về độ chính xác. Các ví dụ dưới đây minh họa các cách tạo đối tượng Decimal.

# Import the decimal module to access Decimal function
from decimal import Decimal
d1 = Decimal("3.14159")
print(d1)
# Import the decimal module to access Decimal function
from decimal import Decimal
d3 = Decimal(3.14159)
print(d3)

Mô-đun decimal cung cấp các phương thức sau để làm tròn lên:

  • ROUND_UP: Luôn làm tròn ra xa số 0.

  • ROUND_CEILING: Luôn làm tròn về phía dương vô cùng.

Với mô-đun decimal, bạn có thể làm tròn số tới độ chính xác mong muốn bằng phương thức .quantize(). Trong ví dụ dưới đây, phương thức ROUND_UP được dùng để làm tròn số thập phân tới số nguyên gần nhất theo hướng ra xa số 0. Bạn có thể đạt được điều này bằng cách chỉ định 1 trong phương thức Decimal để cho biết bạn muốn làm tròn lên tới giá trị số nguyên.

# Import the Decimal class and the ROUND_UP rounding mode from the decimal module
from decimal import Decimal, ROUND_UP

# Create a Decimal object from a string representation of a floating-point number
d = Decimal("-3.14159")

# Round the Decimal object to nearest integer using the ROUND_UP rounding mode
rounded_d_int = d.quantize(Decimal("1"), rounding=ROUND_UP)
print(rounded_d_int) # prints -4

Phương thức ROUND_CEILING từ mô-đun Decimal cũng cho phép làm tròn một số lên số nguyên lớn hơn.

# Import the Decimal class and the ROUND_CEILING rounding mode from the decimal module
from decimal import Decimal, ROUND_CEILING

# Create a Decimal object from a string representation of a floating-point number
d = Decimal("-3.14159")

# Round the Decimal object to nearest integer using ROUND_CEILING rounding mode
rounded_d_int = d.quantize(Decimal("1"), rounding=ROUND_CEILING)
print(rounded_d_int) # prints -3

Làm tròn lên mảng với NumPy

NumPy là một thư viện mạnh mẽ trong Python giúp thực hiện các phép toán trên các mảng và ma trận lớn. Nó thiết yếu trong khoa học dữ liệu nhờ hiệu quả và sự tiện lợi khi tính toán. Một trong các thao tác NumPy cung cấp là làm tròn lên. Hãy xem phương thức np.ceil() có thể dùng để làm tròn lên các phần tử trong một mảng tới số nguyên gần nhất. Cú pháp np.ceil() khá trực quan như dưới đây.

np.ceil(array)

Ví dụ dưới đây minh họa cách làm tròn lên các phần tử trong một mảng bằng phương thức np.ceil().

# Import the numpy module and alias it as np for convenience
import numpy as np

# Create a numpy array with floating-point numbers
array = np.array([3.14, 2.72, 1.61])

# Apply the ceiling function to each element in the numpy array, rounding each number up to the nearest integer
rounded_up_array = np.ceil(array)
print(rounded_up_array) # 4, 3, 2

So sánh tóm tắt

Dưới đây là bảng so sánh các phương pháp làm tròn lên trong Python:

Phương phápĐiểm mạnhĐiểm yếuTrường hợp dùng tốt nhất
math moduleCung cấp tùy chọn làm tròn cụ thể với math.ceil()Cần mô-đun math và không phù hợp cho các kịch bản làm tròn phức tạp.Các phép tính cần làm tròn cụ thể, bao gồm làm tròn lên.
decimal moduleĐộ chính xác và độ chuẩn xác caoPhức tạp khi sử dụngTính toán tài chính
NumPyHiệu quả khi làm tròn mảng bằng np.ceil()Cần thư viện NumPyPhân tích dữ liệu trên tập dữ liệu lớn.

Xử lý sai lệch do làm tròn

Sai lệch do làm tròn (rounding bias) đề cập đến sự méo mó giá trị số khi sử dụng các phương pháp làm tròn. Nó thường xảy ra vì việc làm tròn điều chỉnh số thành một giá trị xấp xỉ lớn hơn hoặc nhỏ hơn giá trị ban đầu. Do đó, sai lệch do làm tròn có thể làm giảm độ chính xác, đặc biệt trong phân tích thống kê và các phép tính tài chính.

Làm tròn nửa lên (rounding half up)

Phương pháp làm tròn nửa lên là làm tròn một số lên nếu nó đúng bằng nửa khoảng giữa hai giá trị có thể. Ví dụ, 2.5 sẽ được làm tròn lên 3. Ưu điểm của phương pháp này là dễ hiểu và phù hợp với những gì thường được dạy ở trường. Trong đoạn mã sau, chúng ta tạo một hàm để kiểm tra xem phần thập phân có đúng bằng 0.5 không, nếu có thì làm tròn lên; nếu không thì làm tròn xuống.

# Create a function to check if a decimal is exactly 0.5 and round up if true
def round_half_up(n):
    if n - int(n) == 0.5:
        return int(n) + 1
    return round(n)
# Example usage
example_number = 2.5
rounded_number = round_half_up(example_number)
print(rounded_number)

Làm tròn nửa về số chẵn (Bankers’ rounding)

Làm tròn nửa về số chẵn, hay làm tròn kiểu ngân hàng, là một phương pháp nhằm giảm thiểu sai lệch. Khi một số đúng bằng nửa khoảng giữa hai số nguyên, nó sẽ được làm tròn về số nguyên chẵn gần nhất. Cách này giúp cân bằng quá trình làm tròn bằng cách tránh thiên lệch liên tục theo hướng tăng hoặc giảm.

Nếu bạn bỏ qua đối số thứ hai, phương thức dựng sẵn round sẽ mặc định làm tròn nửa về số chẵn.

# Python round() method to round half to even
print(round(2.5)) # 2
print(round(3.5)) # 4
print(round(-2.5)) # -2

Kết luận

Làm tròn lên là một kỹ thuật quan trọng trong lập trình vì nó giúp dễ xử lý các giá trị số. Nó cũng thiết yếu trong phân tích thống kê và tính toán tài chính, đơn giản hóa giá trị để cải thiện khả năng đọc và diễn giải. Việc học các phương pháp làm tròn khác nhau và chọn phương pháp phù hợp dựa trên yêu cầu nhiệm vụ cụ thể là rất quan trọng. 

Với tư cách nhà phân tích dữ liệu, tôi khuyến khích bạn thực hành các phương pháp làm tròn lên khác nhau để hiểu cách áp dụng thực tiễn cho từng tác vụ. Tôi đề xuất học các lộ trình kỹ năng Python Fundamentals và Python Programming của DataCamp để nâng cao kỹ năng lập trình. Cuối cùng, lộ trình nghề nghiệp Python Developer sẽ giúp bạn học các kỹ năng Python nâng cao để nổi bật giữa các lập trình viên khác. Nếu bạn tò mò về cơ chế nội tại của số nguyên trong Python, hãy đọc hướng dẫn của chúng tôi về giá trị số nguyên tối đa của Python.

Allan Ouko

Tác giả

Allan Ouko

Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

Câu hỏi thường gặp

Làm thế nào để làm tròn lên tới số nguyên gần nhất trong Python?

Bạn có thể dùng hàm math.ceil() từ mô-đun math để làm tròn lên tới int gần nhất trong Python.

Sai lệch do làm tròn là gì?

Sai lệch do làm tròn xảy ra khi có các giá trị thiếu chính xác do số bị méo mó trong quá trình làm tròn.

Làm tròn nửa về số chẵn là gì?

Phương pháp làm tròn nửa về số chẵn, hay làm tròn kiểu ngân hàng, là làm tròn một số đúng bằng nửa khoảng giữa hai số nguyên về số nguyên chẵn gần nhất.

Sự khác nhau giữa làm tròn và cắt cụt là gì?

Làm tròn một số là điều chỉnh số dựa trên giá trị phần thập phân. Cắt cụt (truncating) là loại bỏ phần thập phân mà không làm tròn.

Nếu tôi muốn làm tròn xuống thay vì làm tròn lên trong Python thì sao?

Nếu bạn muốn làm tròn xuống thay vì làm tròn lên trong Python, bạn có thể dùng hàm math.floor(). Trong khi math.ceil() làm tròn một số lên tới số nguyên gần nhất, math.floor() làm tròn một số xuống tới số nguyên gần nhất. 

Chủ đề

Liên quan