Python Hàm round() với các ví dụ

⚡ Tóm tắt thông minh

Python Hàm round() là một hàm tích hợp trả về giá trị số thực hoặc số nguyên được làm tròn đến số chữ số thập phân được chỉ định, sử dụng phương pháp làm tròn kiểu ngân hàng để giải quyết các trường hợp bằng nhau về phía chữ số chẵn gần nhất.

  • 🔘 Cú pháp: Hàm round(number, ndigits) chấp nhận giá trị cần làm tròn và số lượng chữ số tùy chọn, mặc định là không.
  • ☑️ Kiểu trả về: Nếu bỏ qua tham số ndigits thì trả về một số nguyên, trong khi nếu cung cấp tham số này thì trả về một số thực.
  • Làm tròn số theo kiểu ngân hàng: Các giá trị ở giữa được làm tròn đến số chẵn gần nhất, vì vậy round(2.5) trả về 2.
  • 🧪 Số âm: Việc làm tròn cũng áp dụng cho các số âm, tức là -2.8 thành -3 và -1.5 thành -2.
  • 🛠️ Công cụ chính xác: Mô-đun decimal và hàm round() của NumPy xử lý việc làm tròn số nguyên có độ chính xác cố định và làm tròn mảng.
  • 🤖 Quy trình làm việc của AI: Mã máy học làm tròn các chỉ số, xác suất và trọng số để ghi nhật ký và báo cáo rõ ràng hơn.

Python Hàm round()

Hàm round() là gì? Python?

Python round() là một hàm tích hợp sẵn có sẵn với Python. Nó sẽ trả về cho bạn một số float sẽ được làm tròn đến vị trí thập phân được đưa ra làm đầu vào.

Nếu không chỉ định số thập phân cần làm tròn, số đó sẽ được coi là 0 và sẽ làm tròn đến số nguyên gần nhất.

cú pháp

round(float_num, num_of_decimals)

Thông số Kỹ thuật

  • float_num: Số thực cần làm tròn.
  • số_thập_phân: (Tùy chọn) Số lượng chữ số thập phân được xem xét khi làm tròn. Tham số này là tùy chọn, và nếu không được chỉ định, giá trị mặc định là 0, và việc làm tròn sẽ được thực hiện đến số nguyên gần nhất.

Mô tả Chi tiết

Phương thức round() nhận hai đối số:

  • số cần làm tròn, và
  • các vị trí thập phân cần xem xét khi làm tròn.

Tham số thứ hai là tùy chọn và mặc định là 0 nếu không được chỉ định, trong trường hợp đó, nó sẽ làm tròn đến số nguyên gần nhất, và kiểu trả về cũng sẽ là một số nguyên.

Khi có vị trí thập phân, tức là đối số thứ hai, nó sẽ làm tròn đến số vị trí đã cho. Kiểu trả về sẽ là float.

Nếu chữ số sau dấu thập phân được cho là:

  • Nếu >= 5, thì giá trị cuối cùng sẽ được cộng thêm 1.
  • Nếu nhỏ hơn 5, thì giá trị cuối cùng sẽ được trả về nguyên trạng, đến số chữ số thập phân đã nêu.

Giá trị trả lại

Hàm sẽ trả về giá trị số nguyên nếu tham số num_of_decimals không được cung cấp và giá trị số thực nếu tham số num_of_decimals được cung cấp. Xin lưu ý rằng giá trị sẽ được làm tròn lên +1 nếu giá trị sau dấu thập phân lớn hơn hoặc bằng 5, nếu không, nó sẽ trả về giá trị nguyên trạng, đến số chữ số thập phân đã được chỉ định.

Làm tròn có thể có bao nhiêu tác động? (Làm tròn và cắt bớt)

Ví dụ điển hình nhất để minh họa tác động của việc làm tròn số là thị trường chứng khoán. Trong quá khứ, tức là vào năm 1982, Sở giao dịch chứng khoán Vancouver (VSE) trước đây thường làm tròn giá trị cổ phiếu xuống còn ba chữ số thập phân cho mỗi giao dịch.

Việc này được thực hiện gần 3000 lần mỗi ngày. Sự tích lũy các lỗi cắt xén dẫn đến việc mất khoảng 25 điểm mỗi tháng.

Một ví dụ về việc cắt bớt các giá trị so với làm tròn được hiển thị bên dưới.

Hãy coi các số thực được tạo ra bên dưới như các giá trị cổ phiếu. Hiện tại, tôi đang tạo ra chúng cho một khoảng thời gian 1,000,000 giây, nằm giữa 0.01 và 0.05.

Ví dụ:

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]

Để minh họa tác động của việc làm tròn, tôi đã viết một đoạn mã nhỏ, trong đó ban đầu, bạn chỉ sử dụng các số đến 3 chữ số thập phân, tức là cắt bỏ phần thập phân của số sau 3 chữ số.

Tôi có tổng giá trị ban đầu, tổng giá trị sau khi đã cắt bớt, và hiệu số giữa giá trị ban đầu và giá trị sau khi cắt bớt.

Với cùng một tập hợp số, tôi đã sử dụng phương thức round() làm tròn đến 3 chữ số thập phân và tính tổng cũng như hiệu giữa giá trị ban đầu và giá trị đã làm tròn.

Dưới đây là ví dụ và kết quả.

Ví dụ 1

import random

def truncate(num):
    return int(num * 1000) / 1000

arr = [random.uniform(0.01, 0.05) for _ in range(1000000)]
sum_num = 0
sum_truncate = 0
for i in arr:
    sum_num = sum_num + i  
    sum_truncate = truncate(sum_truncate + i)
  
print("Testing by using truncating upto 3 decimal places")
print("The original sum is = ", sum_num)
print("The total using truncate = ", sum_truncate)
print("The difference from original - truncate = ", sum_num - sum_truncate)

print("\n\n")
print("Testing by using round() upto 3 decimal places")
sum_num1 = 0
sum_truncate1 = 0
for i in arr:
    sum_num1 = sum_num1 + i  
    sum_truncate1 = round(sum_truncate1 + i, 3)

print("The original sum is =", sum_num1)
print("The total using round = ", sum_truncate1)
print("The difference from original - round =", sum_num1 - sum_truncate1)

Đầu ra:

Testing by using truncating upto 3 decimal places
The original sum is =  29985.958619386867
The total using truncate =  29486.057
The difference from original - truncate =  499.9016193868665

Testing by using round() up to 3 decimal places
The original sum is = 29985.958619386867
The total using round =  29985.912
The difference from original - round = 0.04661938686695066

Sự khác biệt giữa giá trị ban đầu và giá trị bị cắt bớt là 499.9016193868665, và từ hàm round(), ta được 0.04661938686695066.

Sự khác biệt có vẻ rất lớn, và ví dụ cho thấy phương thức round() giúp tính toán gần với độ chính xác như thế nào.

Ví dụ: Phao tròn Numbers

Trong chương trình này, chúng ta sẽ tìm hiểu cách làm tròn số thực trên các số thập phân.

# testing round()

float_num1 = 10.60 # here the value will be rounded to 11 as after the decimal point the number is 6 that is >5

float_num2 = 10.40 # here the value will be rounded to 10 as after the decimal point the number is 4 that is <=5

float_num3 = 10.3456 # here the value will be 10.35 as after the 2 decimal points the value >=5

float_num4 = 10.3445 #here the value will be 10.34 as after the 2 decimal points the value is <5

print("The rounded value without num_of_decimals is :", round(float_num1))
print("The rounded value without num_of_decimals is :", round(float_num2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num3, 2))
print("The rounded value with num_of_decimals as 2 is :", round(float_num4, 2))

Đầu ra:

The rounded value without num_of_decimals is : 11
The rounded value without num_of_decimals is : 10
The rounded value with num_of_decimals as 2 is : 10.35
The rounded value with num_of_decimals as 2 is : 10.34

Ví dụ: Làm tròn giá trị số nguyên

Nếu bạn tình cờ sử dụng round() trên một giá trị số nguyên, nó sẽ chỉ trả về số đó cho bạn mà không có bất kỳ thay đổi nào.

# testing round() on a integer

num = 15

print("The output is", round(num))

Đầu ra:

The output is 15

Ví dụ: Làm tròn số âm Numbers

Chúng ta hãy xem một vài ví dụ về cách làm tròn số đối với số âm.

# testing round()

num = -2.8
num1 = -1.5
print("The value after rounding is", round(num))
print("The value after rounding is", round(num1))

Đầu ra:

C:\pythontest>python testround.py
The value after rounding is -3
The value after rounding is -2

Ví dụ: Làm tròn mảng NumPy

Làm thế nào để làm tròn số trong NumPy? mảng trong Python?

Để giải quyết vấn đề này, chúng ta có thể sử dụng mô-đun NumPy và phương thức numpy.round() hoặc numpy.around(), như trong ví dụ bên dưới.

Sử dụng numpy.round()

# testing round()
import numpy as np

arr = [-0.341111, 1.455098989, 4.232323, -0.3432326, 7.626632, 5.122323]

arr1 = np.round(arr, 2)

print(arr1)

Đầu ra:

C:\pythontest>python testround.py
[-0.34  1.46  4.23 -0.34  7.63  5.12]

Chúng ta cũng có thể sử dụng numpy.around(), phương thức này cho kết quả tương tự như numpy.round() đã trình bày ở trên.

Ví dụ: Mô-đun thập phân

Ngoài hàm round(), Python có một mô-đun thập phân giúp xử lý các số thập phân chính xác hơn.

Mô-đun Decimal đi kèm với các kiểu làm tròn, như được hiển thị bên dưới:

  • TRẦN TRÒN: Nó sẽ làm tròn về phía vô cực.
  • ROUND_DOWN: Nó sẽ làm tròn giá trị về phía số không.
  • SÀN TRÒN: Nó sẽ được làm tròn về phía -Vô cực.
  • ROUND_HALF_DOWN: Nó sẽ được làm tròn đến giá trị gần nhất hướng về số không.
  • ROUND_HALF_EVEN: Nó sẽ làm tròn đến giá trị gần nhất, làm tròn đến số nguyên chẵn gần nhất.
  • LÀM TRÒN MỘT NỬA: Nó sẽ làm tròn đến giá trị gần nhất khi càng xa số 0.
  • TỔNG HỢP: Nó sẽ làm tròn khi giá trị càng xa số không.

Trong số thập phân, phương thức quantize() giúp làm tròn đến một số vị trí thập phân cố định và bạn có thể chỉ định cách làm tròn sẽ được sử dụng, như trong ví dụ bên dưới.

Ví dụ: Sử dụng phương thức round() và thập phân

import  decimal
round_num = 15.456

final_val = round(round_num, 2)

#Using decimal module
final_val1 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_CEILING)
final_val2 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_DOWN)
final_val3 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_FLOOR)
final_val4 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_DOWN)
final_val5 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_EVEN)
final_val6 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP)
final_val7 = decimal.Decimal(round_num).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP)

print("Using round()", final_val)
print("Using Decimal - ROUND_CEILING ",final_val1)
print("Using Decimal - ROUND_DOWN ",final_val2)
print("Using Decimal - ROUND_FLOOR ",final_val3)
print("Using Decimal - ROUND_HALF_DOWN ",final_val4)
print("Using Decimal - ROUND_HALF_EVEN ",final_val5)
print("Using Decimal - ROUND_HALF_UP ",final_val6)
print("Using Decimal - ROUND_UP ",final_val7)

Đầu ra:

Using round() 15.46
Using Decimal - ROUND_CEILING  15.46
Using Decimal - ROUND_DOWN  15.45
Using Decimal - ROUND_FLOOR  15.45
Using Decimal - ROUND_HALF_DOWN  15.46
Using Decimal - ROUND_HALF_EVEN  15.46
Using Decimal - ROUND_HALF_UP  15.46
Using Decimal - ROUND_UP  15.46

Câu Hỏi Thường Gặp

STT Python 3 sử dụng phương pháp làm tròn một nửa thành số chẵn (làm tròn theo kiểu ngân hàng) cho các trường hợp bằng nhau, vì vậy round(0.5) là 0, round(2.5) là 2 và round(3.5) là 4. Điều này làm giảm sai lệch tích lũy.

Vì 2.675 không thể được lưu trữ chính xác trong hệ nhị phân dấu phẩy động; nó thực sự được lưu trữ dưới dạng khoảng 2.6749999999999998, nên hàm round() làm tròn xuống. Để có kết quả chính xác, hãy sử dụng decimal.Decimal('2.675').

Sử dụng mô-đun toán học: math.ceil(x) luôn làm tròn lên, math.floor(x) luôn làm tròn xuống và int(x) cắt bớt về phía 0. Bản thân hàm round() không thể buộc một hướng làm tròn cố định.

Truyền đối số thứ hai là số âm: round(12345, -1) cho kết quả 12340, round(12345, -2) cho kết quả 12300 và round(12345, -3) cho kết quả 12000. Số âm ndigits làm tròn sang trái dấu thập phân.

Hàm round(x, 2) thay đổi giá trị được sử dụng trong các phép toán sau này, trong khi f'{x:.2f}' chỉ định dạng hiển thị và giữ nguyên số. Sử dụng round() cho các phép tính, f-string cho đầu ra.

STT Numbers là bất biến, vì vậy hàm round() trả về một giá trị mới mà không thay đổi giá trị đầu vào. Gán giá trị cho nó, ví dụ: result = round(3.14159, 2); biến ban đầu vẫn giữ nguyên độ chính xác.

Mã lập trình máy học làm tròn các giá trị độ chính xác, tổn thất và xác suất để dễ đọc nhật ký và ánh xạ các dự đoán đến nhãn lớp. Giữ nguyên độ chính xác đầy đủ cho các phép toán đạo hàm và chỉ làm tròn các số liệu cuối cùng được hiển thị.

Đúng vậy. Các trợ lý AI như GitHub Copilot tự động hoàn thành các hàm round(), np.round() và làm tròn số thập phân từ tên hàm hoặc chú thích, và các công cụ dựa trên tác nhân sẽ chuyển đổi định dạng thủ công thành các lệnh gọi round(), mặc dù độ chính xác được chọn vẫn cần được xem xét lại.

Tóm tắt bài viết này với: