Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

Đó là thời đại của dữ liệu lớn và mỗi ngày càng có nhiều doanh nghiệp cố gắng tận dụng dữ liệu của họ để đưa ra các quyết định sáng suốt. Nhiều doanh nghiệp đang chuyển sang hệ sinh thái khoa học dữ liệu mạnh mẽ của Python để phân tích dữ liệu của họ, bằng chứng là Python ngày càng phổ biến trong lĩnh vực khoa học dữ liệu

Một điều mà mọi người hành nghề khoa học dữ liệu phải ghi nhớ là tập dữ liệu có thể bị sai lệch như thế nào. Rút ra kết luận từ dữ liệu sai lệch có thể dẫn đến những sai lầm tốn kém

Có nhiều cách thiên vị có thể len ​​lỏi vào một tập dữ liệu. Nếu bạn đã nghiên cứu một số thống kê, có lẽ bạn đã quen thuộc với các thuật ngữ như báo cáo sai lệch, sai lệch lựa chọn và sai lệch lấy mẫu. Có một loại sai lệch khác đóng vai trò quan trọng khi bạn xử lý dữ liệu số. thiên vị làm tròn

Trong bài viết này, bạn sẽ học

  • Tại sao cách bạn làm tròn số lại quan trọng
  • Cách làm tròn số theo các chiến lược làm tròn khác nhau và cách triển khai từng phương thức trong Python thuần túy
  • Cách làm tròn ảnh hưởng đến dữ liệu và chiến lược làm tròn nào giảm thiểu hiệu ứng này
  • Cách làm tròn số trong mảng NumPy và Pandas DataFrames
  • Khi nào nên áp dụng các chiến lược làm tròn khác nhau

Lấy bài kiểm tra. Kiểm tra kiến ​​thức của bạn với bài kiểm tra tương tác “Làm tròn số trong Python” của chúng tôi. Sau khi hoàn thành, bạn sẽ nhận được điểm số để có thể theo dõi quá trình học tập của mình theo thời gian

Lấy bài kiểm tra "

Bài viết này không phải là một chuyên luận về độ chính xác của số trong máy tính, mặc dù chúng tôi sẽ đề cập ngắn gọn về chủ đề này. Chỉ cần làm quen với các nguyên tắc cơ bản của Python và toán học liên quan ở đây sẽ cảm thấy thoải mái với bất kỳ ai quen thuộc với đại số tương đương ở trường trung học

Hãy bắt đầu bằng cách xem cơ chế làm tròn tích hợp của Python

Chức năng def truncate(n, decimals=0): multiplier = 10 ** decimals return int(n * multiplier) / multiplier 9 tích hợp của Python

Python có hàm

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp, nhận hai đối số số,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
2, rồi trả về số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 được làm tròn thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
2. Đối số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
2 mặc định là 0, vì vậy bỏ qua nó sẽ dẫn đến một số được làm tròn thành số nguyên. Như bạn sẽ thấy,
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 có thể không hoạt động như bạn mong đợi

Cách mà hầu hết mọi người được dạy để làm tròn số diễn ra như thế này

Làm tròn số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 đến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
8 chữ số thập phân bằng cách dịch chuyển dấu thập phân ở
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
8 chữ số bằng cách nhân
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 với 10ᵖ (10 lũy thừa 28) để được một số mới
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
43

Sau đó nhìn vào chữ số

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
44 ở vị trí thập phân đầu tiên của
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
43. Nếu
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
44 nhỏ hơn 5, làm tròn
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
43 xuống số nguyên gần nhất. Nếu không, hãy làm tròn
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
43 lên

Cuối cùng, chuyển dấu thập phân trở lại

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
8 vị trí bằng cách chia
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
43 cho 10ᵖ

Đó là một thuật toán đơn giản. Ví dụ: số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
21 được làm tròn thành số nguyên gần nhất là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
22. Số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
23 được làm tròn đến một chữ số thập phân là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
24

Bây giờ hãy mở một phiên phiên dịch và làm tròn

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
21 thành số nguyên gần nhất bằng cách sử dụng hàm
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp sẵn của Python

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
8

thở hổn hển

Làm thế nào để

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 xử lý số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
28?

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1

Vì vậy,

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 làm tròn
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
28 lên tới
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
21 xuống tới
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101

Trước khi bạn đưa ra một vấn đề trên trình theo dõi lỗi Python, hãy để tôi đảm bảo với bạn rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
104 phải trả lại
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101. Có lý do chính đáng khiến
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 cư xử như vậy

Trong bài viết này, bạn sẽ biết rằng có nhiều cách làm tròn số hơn bạn tưởng, mỗi cách đều có những ưu điểm và nhược điểm riêng.

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 hoạt động theo một chiến lược làm tròn cụ thể—có thể hoặc không phải là chiến lược bạn cần cho một tình huống nhất định

Bạn có thể thắc mắc, “Liệu cách tôi làm tròn số có thực sự có tác động lớn như vậy không?”

Loại bỏ các quảng cáo

Làm tròn có thể có bao nhiêu tác động?

Giả sử bạn có một ngày vô cùng may mắn và tìm thấy 100 đô la trên mặt đất. Thay vì tiêu hết tiền cùng một lúc, bạn quyết định chơi thông minh và đầu tư tiền của mình bằng cách mua một số cổ phiếu của các cổ phiếu khác nhau

Giá trị của một cổ phiếu phụ thuộc vào cung và cầu. Càng có nhiều người muốn mua cổ phiếu thì cổ phiếu đó càng có giá trị và ngược lại. Ở các thị trường chứng khoán có khối lượng lớn, giá trị của một cổ phiếu cụ thể có thể dao động theo từng giây

Hãy chạy một thử nghiệm nhỏ. Chúng tôi sẽ giả sử giá trị tổng thể của các cổ phiếu bạn đã mua dao động theo một số ngẫu nhiên nhỏ mỗi giây, chẳng hạn như trong khoảng 0 đô la. 05 và -$0. 05. Biến động này có thể không nhất thiết phải là một giá trị đẹp chỉ với hai chữ số thập phân. Ví dụ: giá trị tổng thể có thể tăng thêm $0. 031286 một giây và giảm giây tiếp theo $0. 028476

Bạn không muốn theo dõi giá trị của mình đến chữ số thập phân thứ năm hoặc thứ sáu, vì vậy bạn quyết định cắt bỏ mọi thứ sau chữ số thập phân thứ ba. Trong thuật ngữ làm tròn, điều này được gọi là cắt bớt số đến vị trí thập phân thứ ba. Có một số lỗi có thể xảy ra ở đây, nhưng bằng cách giữ ba chữ số thập phân, lỗi này không đáng kể. Đúng?

Để chạy thử nghiệm của chúng tôi bằng Python, hãy bắt đầu bằng cách viết hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 cắt bớt một số đến ba chữ số thập phân

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
2

Hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 hoạt động bằng cách đầu tiên dịch chuyển dấu thập phân của số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 sang bên phải ba vị trí bằng cách nhân
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112. Phần nguyên của số mới này được lấy bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
113. Cuối cùng, dấu thập phân được dịch chuyển ba vị trí về bên trái bằng cách chia
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 cho
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112

Tiếp theo, hãy xác định các tham số ban đầu của mô phỏng. Bạn sẽ cần hai biến. một để theo dõi giá trị thực tế của cổ phiếu của bạn sau khi mô phỏng hoàn tất và một cho giá trị của cổ phiếu sau khi bạn đã cắt bớt ba chữ số thập phân ở mỗi bước

Bắt đầu bằng cách khởi tạo các biến này thành

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
116

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1

Bây giờ, hãy chạy mô phỏng trong 1.000.000 giây (khoảng 11. 5 ngày). Đối với mỗi giây, hãy tạo một giá trị ngẫu nhiên trong khoảng từ

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
117 đến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
118 bằng hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
119 trong mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120, sau đó cập nhật
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
121 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
122

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
8

Cốt lõi của mô phỏng diễn ra trong vòng lặp

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
123, vòng lặp này lặp lại trên
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
124 của các số giữa
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
125 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
126. Giá trị được lấy từ
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
127 ở mỗi bước được lưu trữ trong biến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
128 mà chúng tôi sử dụng ở đây vì chúng tôi thực sự không cần giá trị này bên trong vòng lặp

Ở mỗi bước của vòng lặp, một số ngẫu nhiên mới giữa

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
117 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
118 được tạo bằng cách sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
131 và được gán cho biến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
132. Giá trị mới của khoản đầu tư của bạn được tính bằng cách cộng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
132 với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
134 và tổng số bị cắt bớt được tính bằng cách cộng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
132 với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
136, sau đó cắt bớt giá trị này bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108

Như bạn có thể thấy bằng cách kiểm tra biến

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
134 sau khi chạy vòng lặp, bạn chỉ mất khoảng $3. 55. Tuy nhiên, nếu bạn đang xem
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
136, bạn sẽ nghĩ rằng mình đã mất gần hết số tiền của mình

Ghi chú. Trong ví dụ trên, hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
140 được sử dụng để khởi tạo trình tạo số giả ngẫu nhiên để bạn có thể tạo lại đầu ra được hiển thị ở đây

Để tìm hiểu thêm về tính ngẫu nhiên trong Python, hãy xem Real Python's Tạo dữ liệu ngẫu nhiên trong Python (Hướng dẫn)

Tạm thời bỏ qua việc

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 không hoạt động như bạn mong đợi, hãy thử chạy lại mô phỏng. Lần này, chúng tôi sẽ sử dụng
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 để làm tròn đến ba chữ số thập phân ở mỗi bước và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
143 mô phỏng lại để có được kết quả giống như trước đây

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
0

Thật la khac biệt

Có vẻ như gây sốc, lỗi chính xác này đã gây xôn xao vào đầu những năm 1980 khi hệ thống được thiết kế để ghi lại giá trị của Sở giao dịch chứng khoán Vancouver đã cắt bớt giá trị chỉ số tổng thể đến ba chữ số thập phân thay vì làm tròn. Lỗi làm tròn đã ảnh hưởng đến cuộc bầu cử và thậm chí dẫn đến mất mạng

Cách bạn làm tròn số rất quan trọng và với tư cách là nhà phát triển và thiết kế phần mềm có trách nhiệm, bạn cần biết những vấn đề phổ biến là gì và cách giải quyết chúng. Hãy đi sâu vào và khám phá các phương thức làm tròn khác nhau là gì và cách bạn có thể triển khai từng phương thức trong Python thuần túy

Loại bỏ các quảng cáo

Một bầy phương pháp

Có rất nhiều chiến lược làm tròn, mỗi chiến lược đều có ưu điểm và nhược điểm. Trong phần này, bạn sẽ tìm hiểu về một số kỹ thuật phổ biến nhất và cách chúng có thể ảnh hưởng đến dữ liệu của bạn

cắt ngắn

Phương pháp làm tròn số đơn giản nhất, mặc dù thô sơ nhất, là cắt ngắn số đó thành một số chữ số cho trước. Khi bạn cắt bớt một số, bạn thay thế mỗi chữ số sau một vị trí nhất định bằng 0. Dưới đây là một số ví dụ

Giá trị bị cắt bớt ToResult12. 345Hàng chục vị trí1012. 345Một chỗ1212. 345Hàng phần mười12. 312. 345Hàng phần trăm12. 34

Bạn đã thấy một cách để triển khai điều này trong hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 từ Làm tròn có thể có tác động đến mức nào? . Trong chức năng đó, số đầu vào được cắt ngắn đến ba chữ số thập phân bởi

  • Nhân số với
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    112 để dịch chuyển dấu thập phân sang phải ba vị trí
  • Lấy phần nguyên của số mới đó với
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    113
  • Dịch chuyển vị trí thập phân về bên trái ba vị trí bằng cách chia cho
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    112

Bạn có thể tổng quát hóa quy trình này bằng cách thay thế

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 bằng số 10ᵖ (
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
149 được nâng lên lũy thừa p), trong đó p là số chữ số thập phân cần cắt bớt thành

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier

Trong phiên bản này của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108, đối số thứ hai mặc định là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
125 để nếu không có đối số thứ hai nào được truyền cho hàm, thì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 sẽ trả về phần nguyên của bất kỳ số nào được truyền cho nó

Hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 hoạt động tốt cho cả số dương và số âm

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62

Bạn thậm chí có thể chuyển một số âm tới

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
154 để cắt bớt thành các chữ số ở bên trái dấu thập phân

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
4

Khi bạn cắt bớt một số dương, bạn đang làm tròn số đó xuống. Tương tự như vậy, cắt bớt một số âm làm tròn số đó lên. Theo một nghĩa nào đó, cắt bớt là sự kết hợp của các phương pháp làm tròn tùy thuộc vào dấu của số bạn đang làm tròn

Chúng ta hãy xem xét riêng từng phương pháp làm tròn này, bắt đầu bằng cách làm tròn lên

Tập trung

Chiến lược làm tròn thứ hai mà chúng ta sẽ xem xét được gọi là “làm tròn. ” Chiến lược này luôn làm tròn một số đến một số chữ số xác định. Bảng dưới đây tóm tắt chiến lược này

Giá trịLàm tròn đếnResult12. 345Hàng chục vị trí2012. 345Một chỗ1312. 345Hàng phần mười12. 412. 345Hàng phần trăm12. 35

Để triển khai chiến lược “làm tròn” trong Python, chúng ta sẽ sử dụng hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
155 từ mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
156

Hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
155 lấy tên từ thuật ngữ "trần", được sử dụng trong toán học để mô tả số nguyên gần nhất lớn hơn hoặc bằng một số đã cho

Mọi số không phải là số nguyên đều nằm giữa hai số nguyên liên tiếp. Ví dụ: số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
158 nằm trong khoảng giữa
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101. “Trần” là điểm lớn hơn trong hai điểm cuối của khoảng. Điểm thấp hơn trong hai điểm cuối được gọi là “sàn. ” Như vậy, trần của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
158 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101 và sàn của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
158 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159

Trong toán học, một hàm đặc biệt được gọi là hàm trần ánh xạ mọi số tới trần của nó. Để cho phép hàm trần chấp nhận số nguyên, trần của một số nguyên được xác định là chính số nguyên đó. Vậy trần của số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101

Trong Python,

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
167 triển khai hàm trần và luôn trả về số nguyên gần nhất lớn hơn hoặc bằng đầu vào của nó

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
2

Lưu ý rằng trần của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
168 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
125, không phải
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
170. Điều này có ý nghĩa vì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
125 là số nguyên gần nhất với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
168 lớn hơn hoặc bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
168

Hãy viết một hàm có tên là

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 thực hiện chiến lược “làm tròn số”

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
10

Bạn có thể nhận thấy rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 trông rất giống với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108. Đầu tiên, dấu thập phân trong
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 được dịch chuyển đúng số vị trí sang bên phải bằng cách nhân
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
179. Giá trị mới này được làm tròn lên đến số nguyên gần nhất bằng cách sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
167, sau đó dấu thập phân được chuyển về bên trái bằng cách chia cho
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
179

Mô hình dịch chuyển dấu thập phân này, áp dụng một số phương pháp làm tròn để làm tròn thành một số nguyên, sau đó dịch chuyển dấu thập phân trở lại sẽ xuất hiện nhiều lần khi chúng tôi nghiên cứu thêm các phương pháp làm tròn. Rốt cuộc, đây là thuật toán tinh thần mà con người chúng ta sử dụng để làm tròn số bằng tay

Hãy xem

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 hoạt động tốt như thế nào đối với các đầu vào khác nhau

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
11

Cũng giống như

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108, bạn có thể chuyển giá trị âm cho
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
154

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
12

Khi bạn chuyển một số âm cho

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
154, số trong đối số đầu tiên của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 được làm tròn thành đúng số chữ số ở bên trái dấu thập phân

Hãy đoán những gì

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
187 trả về

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
13

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
188 những gì bạn mong đợi?

Nếu bạn kiểm tra logic được sử dụng trong việc xác định

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174—cụ thể là cách thức hoạt động của hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
167—thì có nghĩa là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
187 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
188. Tuy nhiên, một số người tự nhiên mong đợi sự đối xứng xung quanh số 0 khi làm tròn số, do đó, nếu
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
28 được làm tròn thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101, thì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
195 sẽ được làm tròn thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
196

Hãy thiết lập một số thuật ngữ. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụng thuật ngữ “làm tròn lên” và “làm tròn xuống” theo sơ đồ sau

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?
Vòng lên bên phải và xuống bên trái. (Hình ảnh. Đa-vít A-mốt)

Làm tròn lên luôn làm tròn một số ở bên phải trên dòng số và làm tròn xuống luôn làm tròn một số ở bên trái trên dòng số

Loại bỏ các quảng cáo

Làm tròn xuống

Đối lập với chiến lược "làm tròn lên" là chiến lược "làm tròn xuống", chiến lược này luôn làm tròn một số xuống một số chữ số được chỉ định. Dưới đây là một số ví dụ minh họa cho chiến lược này

Giá trị được làm tròn xuống thànhResult12. 345Hàng chục vị trí1012. 345Một chỗ1212. 345Hàng phần mười12. 312. 345Hàng phần trăm12. 34

Để triển khai chiến lược “làm tròn xuống” trong Python, chúng ta có thể thực hiện theo cùng một thuật toán mà chúng ta đã sử dụng cho cả

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
197 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174. Đầu tiên dịch chuyển dấu thập phân, sau đó làm tròn thành số nguyên và cuối cùng chuyển dấu thập phân trở lại

Trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174, chúng tôi đã sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
167 để làm tròn số trần sau khi chuyển dấu thập phân. Tuy nhiên, đối với chiến lược “làm tròn xuống”, chúng ta cần làm tròn đến sàn của số sau khi chuyển dấu thập phân

Thật may mắn cho chúng ta, mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
156 có hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
202 trả về giá trị sàn cho đầu vào của nó

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
14

Đây là định nghĩa của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
15

Trông giống như

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174, ngoại trừ
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
167 đã được thay thế bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
206

Bạn có thể kiểm tra

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 trên một vài giá trị khác nhau

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
16

Ảnh hưởng của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 có thể khá nghiêm trọng. Bằng cách làm tròn số trong một tập dữ liệu lớn lên hoặc xuống, bạn có khả năng loại bỏ rất nhiều độ chính xác và thay đổi đáng kể các tính toán được tạo từ dữ liệu

Trước khi chúng ta thảo luận về bất kỳ chiến lược làm tròn nào nữa, hãy dừng lại và dành một chút thời gian để nói về việc làm tròn có thể khiến dữ liệu của bạn bị sai lệch như thế nào

xen vào. Xu hướng làm tròn

Bây giờ bạn đã thấy ba phương pháp làm tròn.

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203. Cả ba kỹ thuật này đều khá thô sơ khi bảo toàn độ chính xác hợp lý cho một số nhất định

Có một sự khác biệt quan trọng giữa

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 làm nổi bật một khía cạnh quan trọng của việc làm tròn. đối xứng xung quanh số không

Nhớ lại rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 không đối xứng quanh 0. Về mặt toán học, một hàm f(x) đối xứng quanh 0 nếu, với mọi giá trị của x, f(x) + f(-x) = 0. Ví dụ:
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
217 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101, nhưng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
187 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
170. Hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 cũng không đối xứng quanh 0

Mặt khác, hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 đối xứng quanh 0. Điều này là do, sau khi dịch chuyển dấu thập phân sang phải,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 sẽ cắt bỏ các chữ số còn lại. Khi giá trị ban đầu là dương, số tiền này sẽ làm tròn số xuống. Số âm được làm tròn lên. Vì vậy,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
224 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
226 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
170

Khái niệm đối xứng đưa ra khái niệm về độ lệch làm tròn, mô tả cách làm tròn ảnh hưởng đến dữ liệu số trong tập dữ liệu

Chiến lược “làm tròn” có một vòng hướng tới độ lệch dương vô cực, bởi vì giá trị luôn được làm tròn theo hướng dương vô cực. Tương tự như vậy, chiến lược “làm tròn xuống” có một vòng hướng tới độ lệch vô cực âm

Chiến lược “cắt ngắn” thể hiện một vòng hướng tới độ lệch vô cực âm đối với các giá trị dương và một vòng hướng tới vô cực dương đối với các giá trị âm. Nói chung, các hàm làm tròn với hành vi này được cho là có độ lệch làm tròn về 0

Hãy xem cách nó hoạt động trong thực tế. Xem xét danh sách float sau đây

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
17

Hãy tính giá trị trung bình của các giá trị trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 bằng cách sử dụng hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
229

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
18

Bây giờ hãy áp dụng từng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 trong cách hiểu danh sách để làm tròn mỗi số trong
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 đến một chữ số thập phân và tính giá trị trung bình mới

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
19

Sau khi mọi số trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 được làm tròn lên, giá trị trung bình mới là khoảng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
235, lớn hơn giá trị trung bình thực tế là khoảng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
236. Làm tròn xuống sẽ dịch chuyển giá trị trung bình xuống khoảng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
237. Giá trị trung bình của các giá trị bị cắt ngắn là khoảng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
238 và gần nhất với giá trị trung bình thực tế

Ví dụ này không ngụ ý rằng bạn phải luôn cắt bớt khi bạn cần làm tròn các giá trị riêng lẻ trong khi vẫn giữ nguyên giá trị trung bình càng sát càng tốt. Danh sách

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 chứa số lượng giá trị dương và âm bằng nhau. Hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108 sẽ hoạt động giống như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 trên danh sách tất cả các giá trị dương và giống như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 trong danh sách tất cả các giá trị âm

Ví dụ này minh họa điều gì là hiệu ứng làm tròn sai lệch có trên các giá trị được tính toán từ dữ liệu đã được làm tròn. Bạn sẽ cần ghi nhớ những ảnh hưởng này khi rút ra kết luận từ dữ liệu đã được làm tròn

Thông thường, khi làm tròn, bạn quan tâm đến việc làm tròn đến số gần nhất với một số độ chính xác được chỉ định, thay vì chỉ làm tròn mọi thứ lên hoặc xuống

Ví dụ: nếu ai đó yêu cầu bạn làm tròn số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
243 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
244 đến một chữ số thập phân, bạn có thể sẽ nhanh chóng trả lời bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
158 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
246. Các hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 không làm bất cứ điều gì như thế này

Còn số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
250 thì sao? . Theo một nghĩa nào đó,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
158 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
246 đều là những số gần nhất với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
250 với độ chính xác một chữ số thập phân. Số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
250 được gọi là số hòa đối với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
158 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
246. Trong những trường hợp như thế này, bạn phải chỉ định một tiebreak

Cách mà hầu hết mọi người được dạy phá vỡ mối quan hệ là làm tròn đến số lớn hơn trong hai số có thể

Loại bỏ các quảng cáo

Làm tròn một nửa

Chiến lược “làm tròn một nửa” làm tròn mọi số đến số gần nhất với độ chính xác được chỉ định và phá vỡ các mối quan hệ bằng cách làm tròn lên. Dưới đây là một số ví dụ

Giá trịLàm tròn một nửa đếnResult13. 825Hàng chục vị trí1013. 825Một chỗ1413. 825Hàng phần mười13. 813. 825Hàng phần trăm13. 83

Để triển khai chiến lược “làm tròn một nửa” trong Python, bạn bắt đầu như thường lệ bằng cách dịch chuyển dấu thập phân sang phải theo số vị trí mong muốn. Tuy nhiên, tại thời điểm này, bạn cần một cách để xác định xem chữ số ngay sau dấu thập phân đã dịch chuyển có nhỏ hơn hoặc lớn hơn hoặc bằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
261 hay không

Một cách để làm điều này là thêm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
262 vào giá trị đã thay đổi và sau đó làm tròn xuống bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
206. Điều này hoạt động bởi vì

  • Nếu chữ số ở vị trí thập phân đầu tiên của giá trị đã thay đổi nhỏ hơn năm, thì việc thêm

    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    262 sẽ không thay đổi phần nguyên của giá trị đã thay đổi, do đó, sàn bằng với phần nguyên

  • Nếu chữ số đầu tiên sau vị trí thập phân lớn hơn hoặc bằng

    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    261, thì việc thêm
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    262 sẽ làm tăng phần nguyên của giá trị đã dịch chuyển lên
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    159, do đó, sàn bằng với số nguyên lớn hơn này

Đây là giao diện của nó trong Python

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
20

Lưu ý rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 trông rất giống
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203. Điều này có thể hơi phản trực giác, nhưng nội bộ
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 chỉ làm tròn xuống. Mẹo nhỏ là thêm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
262 sau khi dịch chuyển dấu thập phân để kết quả làm tròn xuống khớp với giá trị dự kiến

Hãy kiểm tra

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 trên một vài giá trị để thấy rằng nó hoạt động

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
21

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 luôn phá vỡ các mối quan hệ bằng cách làm tròn đến giá trị lớn hơn trong hai giá trị có thể, nên các giá trị âm như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
195 sẽ làm tròn thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
170, chứ không phải
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
196

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
22

Tuyệt quá. Giờ đây, cuối cùng bạn cũng có thể nhận được kết quả mà hàm

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp đã từ chối đối với bạn

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
23

Tuy nhiên, trước khi bạn quá phấn khích, hãy xem điều gì sẽ xảy ra khi bạn thử làm tròn từ

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
278 đến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101 chữ số thập phân

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
24

Chờ đợi. Chúng ta vừa thảo luận về cách các mối quan hệ được làm tròn thành giá trị lớn hơn trong hai giá trị có thể.

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
278 nằm ở giữa
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
281 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
282. Vì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
281 lớn hơn trong hai giá trị này, nên
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
284 sẽ trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
281. Nhưng thay vào đó, chúng tôi có
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
282

Có lỗi trong hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 không?

Khi ________ 4268 làm tròn ________ 4278 đến hai chữ số thập phân, điều đầu tiên nó làm là nhân

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
278 với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
116. Hãy đảm bảo điều này hoạt động như mong đợi

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
25

Chà… sai rồi. Nhưng nó giải thích tại sao

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
284 trả về -1. 23. Hãy tiếp tục từng bước thuật toán
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268, sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
128 trong REPL để gọi lại đầu ra giá trị cuối cùng ở mỗi bước

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
26

Mặc dù

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
295 rất gần với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
296, nhưng số nguyên gần nhất nhỏ hơn hoặc bằng nó là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
297. Khi dấu thập phân được chuyển về bên trái, giá trị cuối cùng là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
282

Chà, bây giờ bạn đã biết cách

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
284 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
282 mặc dù không có lỗi logic nào, nhưng tại sao Python lại nói rằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
102?

Qua một bên. Trong phiên phiên dịch Python, hãy nhập nội dung sau

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
27

Lần đầu tiên nhìn thấy điều này có thể khá sốc, nhưng đây là một ví dụ cổ điển về lỗi biểu diễn dấu phẩy động. Nó không liên quan gì đến Python. Lỗi liên quan đến cách máy lưu trữ số dấu phẩy động trong bộ nhớ

Hầu hết các máy tính hiện đại lưu trữ số dấu phẩy động dưới dạng số thập phân nhị phân với độ chính xác 53 bit. Chỉ những số có biểu diễn thập phân nhị phân hữu hạn có thể được biểu thị bằng 53 bit mới được lưu dưới dạng giá trị chính xác. Không phải mọi số đều có biểu diễn thập phân nhị phân hữu hạn

Ví dụ: số thập phân

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
103 có dạng biểu diễn thập phân hữu hạn nhưng biểu diễn nhị phân vô hạn. Giống như phân số 1/3 chỉ có thể được biểu diễn dưới dạng số thập phân dưới dạng số thập phân lặp lại vô hạn
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
104, phân số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
105 chỉ có thể được biểu diễn dưới dạng nhị phân dưới dạng số thập phân lặp lại vô hạn
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
106

Một giá trị có biểu diễn nhị phân vô hạn được làm tròn thành giá trị gần đúng được lưu trong bộ nhớ. Phương pháp mà hầu hết các máy sử dụng để làm tròn được xác định theo tiêu chuẩn IEEE-754, tiêu chuẩn này chỉ định làm tròn đến phân số nhị phân có thể biểu thị gần nhất

Các tài liệu Python có một phần gọi là Số học dấu phẩy động. Các vấn đề và hạn chế có điều này để nói về số 0. 1

Trên hầu hết các máy, nếu Python in giá trị thập phân thực của xấp xỉ nhị phân được lưu trữ cho

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
103, nó sẽ phải hiển thị

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
28

Đó là nhiều chữ số hơn hầu hết mọi người thấy hữu ích, vì vậy Python giữ cho số lượng chữ số có thể quản lý được bằng cách hiển thị một giá trị được làm tròn thay thế

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
29

Chỉ cần nhớ rằng, mặc dù kết quả được in trông giống như giá trị chính xác của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
105, nhưng giá trị được lưu trữ thực tế là phân số nhị phân có thể biểu thị gần nhất. (Nguồn)

Để có chuyên luận sâu hơn về số học dấu phẩy động, hãy xem bài viết của David Goldberg Điều mà mọi nhà khoa học máy tính nên biết về số học dấu phẩy động, được xuất bản lần đầu trên tạp chí ACM Computing Surveys, Vol. 23, Không. 1 tháng 3 năm 1991

Việc Python nói rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
102 là một sự tạo tác của lỗi biểu diễn dấu phẩy động. Bạn có thể tự hỏi mình, "Được rồi, nhưng có cách nào để khắc phục điều này không?"

Các số dấu phẩy động không có độ chính xác chính xác và do đó không nên được sử dụng trong các tình huống mà độ chính xác là tối quan trọng. Đối với các ứng dụng cần độ chính xác chính xác, bạn có thể sử dụng lớp

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 từ mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 của Python. Bạn sẽ tìm hiểu thêm về lớp
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 bên dưới

Nếu bạn đã xác định rằng lớp

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
114 tiêu chuẩn của Python là đủ cho ứng dụng của bạn, thì một số lỗi không thường xuyên trong
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 do lỗi biểu diễn dấu phẩy động không phải là vấn đề đáng lo ngại

Bây giờ bạn đã biết cách máy làm tròn số trong bộ nhớ, hãy tiếp tục thảo luận về các chiến lược làm tròn bằng cách xem xét một cách khác để phá vỡ thế ràng buộc

Loại bỏ các quảng cáo

Làm tròn một nửa xuống

Chiến lược “làm tròn một nửa xuống” làm tròn đến số gần nhất với độ chính xác mong muốn, giống như phương pháp “làm tròn một nửa lên”, ngoại trừ việc nó phá vỡ các mối quan hệ bằng cách làm tròn đến số nhỏ hơn trong hai số. Dưới đây là một số ví dụ

Giá trịRound Half Down ToResult13. 825Hàng chục vị trí1013. 825Một chỗ1413. 825Hàng phần mười13. 813. 825Hàng phần trăm13. 82

Bạn có thể triển khai chiến lược “làm tròn một nửa xuống” trong Python bằng cách thay thế

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
206 trong hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
167 và trừ đi
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
262 thay vì cộng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
10

Hãy kiểm tra

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120 với một vài trường hợp thử nghiệm

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
11

Cả

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120 nói chung không có sai lệch. Tuy nhiên, làm tròn dữ liệu với nhiều ràng buộc sẽ gây ra sai lệch. Đối với một ví dụ cực đoan, hãy xem xét danh sách các số sau đây

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
12

Hãy tính giá trị trung bình của các số này

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
13

Tiếp theo, tính giá trị trung bình trên dữ liệu sau khi làm tròn đến một chữ số thập phân với

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
14

Mỗi số trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 là một số hòa đối với việc làm tròn đến một chữ số thập phân. Hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 giới thiệu một vòng hướng tới độ lệch vô cực dương và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120 giới thiệu một vòng hướng tới độ lệch vô cực âm

Các chiến lược làm tròn còn lại mà chúng tôi sẽ thảo luận đều cố gắng giảm thiểu những sai lệch này theo những cách khác nhau

Làm tròn một nửa từ số không

Nếu bạn kiểm tra kỹ

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120, bạn sẽ nhận thấy rằng cả hai hàm này đều không đối xứng quanh 0

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
15

Một cách để giới thiệu tính đối xứng là luôn làm tròn một điểm cách xa số 0. Bảng sau đây minh họa cách thức hoạt động của nó

ValueRound Half Away From Zero ToResult15. 25Hàng chục vị trí2015. 25Một chỗ1515. 25Hàng phần mười15. 3-15. 25Hàng chục vị trí-20-15. 25Một vị trí-15-15. 25Hàng phần mười-15. 3

Để thực hiện chiến lược “làm tròn nửa số 0” trên một số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1, bạn bắt đầu như thường lệ bằng cách dịch chuyển dấu thập phân sang phải một số vị trí nhất định. Sau đó, bạn nhìn vào chữ số
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
44 ngay bên phải chữ số thập phân trong số mới này. Tại thời điểm này, có bốn trường hợp để xem xét

  1. Nếu
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    1 dương và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    133, hãy làm tròn lên
  2. Nếu
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    1 dương và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    135, làm tròn xuống
  3. Nếu
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    1 là số âm và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    133, hãy làm tròn xuống
  4. Nếu
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    1 là số âm và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    135, hãy làm tròn lên

Sau khi làm tròn theo một trong bốn quy tắc trên, bạn dịch chuyển chữ số thập phân về bên trái

Đưa ra một số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 và một giá trị cho
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
154, bạn có thể thực hiện điều này trong Python bằng cách sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
120

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
16

Điều đó đủ dễ dàng, nhưng thực sự có một cách đơn giản hơn

Nếu lần đầu tiên bạn lấy giá trị tuyệt đối của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 bằng cách sử dụng hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
145 tích hợp sẵn của Python, thì bạn chỉ cần sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 để làm tròn số. Sau đó, tất cả những gì bạn cần làm là đặt dấu cho số được làm tròn giống như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1. Một cách để làm điều này là sử dụng hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
148

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
148 lấy hai số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
150 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
151 và trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
150 với dấu của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
151

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
17

Lưu ý rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
148 trả về một
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
114, mặc dù cả hai đối số của nó đều là số nguyên

Sử dụng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
145,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
148, bạn có thể triển khai chiến lược “làm tròn nửa số 0” chỉ trong hai dòng Python

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
18

Trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159, giá trị tuyệt đối của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 được làm tròn đến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
154 chữ số thập phân bằng cách sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 và kết quả này được gán cho biến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
163. Sau đó, dấu ban đầu của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
1 được áp dụng cho
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
163 bằng cách sử dụng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
148 và giá trị cuối cùng có dấu đúng này được hàm trả về

Kiểm tra

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 trên một vài giá trị khác nhau cho thấy chức năng hoạt động như mong đợi

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
19

Hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 làm tròn số theo cách mà hầu hết mọi người thường làm tròn số trong cuộc sống hàng ngày. Bên cạnh chức năng làm tròn quen thuộc nhất mà bạn từng thấy cho đến nay,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 còn loại bỏ tốt xu hướng làm tròn trong các bộ dữ liệu có số lượng ràng buộc dương và âm bằng nhau

Hãy kiểm tra xem

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 giảm thiểu sai lệch làm tròn tốt như thế nào trong ví dụ từ phần trước

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
80

Giá trị trung bình của các số trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 được bảo toàn gần như chính xác khi bạn làm tròn mỗi số trong
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 đến một chữ số thập phân với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159

Tuy nhiên,

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 sẽ thể hiện xu hướng làm tròn khi bạn làm tròn mọi số trong tập dữ liệu chỉ có ràng buộc dương, chỉ ràng buộc âm hoặc nhiều ràng buộc của một dấu hiệu hơn dấu hiệu kia. Xu hướng chỉ được giảm thiểu tốt nếu có một số lượng tương tự các mối quan hệ tích cực và tiêu cực trong tập dữ liệu

Làm thế nào để bạn xử lý các tình huống trong đó số lượng các mối quan hệ tích cực và tiêu cực khác nhau đáng kể? . Hàm

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp sẵn của Python

Loại bỏ các quảng cáo

Làm tròn một nửa đến chẵn

Một cách để giảm thiểu sai lệch làm tròn khi làm tròn các giá trị trong tập dữ liệu là làm tròn các mối liên hệ với số chẵn gần nhất với độ chính xác mong muốn. Dưới đây là một số ví dụ về cách làm điều đó

ValueRound Half Đến Chẵn ĐếnResult15. 255Hàng chục vị trí2015. 255Một chỗ1515. 255Hàng phần mười15. 315. 255Hàng phần trăm15. 26

“Chiến lược làm tròn một nửa thành chẵn” là chiến lược được sử dụng bởi hàm

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp sẵn của Python và là quy tắc làm tròn mặc định trong tiêu chuẩn IEEE-754. Chiến lược này hoạt động theo giả định rằng xác suất hòa trong tập dữ liệu được làm tròn xuống hoặc làm tròn lên là bằng nhau. Trong thực tế, điều này thường xảy ra

Bây giờ bạn đã biết tại sao

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
104 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
101. Đó không phải là một sai lầm. Đó là một quyết định thiết kế có ý thức dựa trên các khuyến nghị vững chắc

Để chứng minh với bản thân rằng

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 thực sự làm tròn tới số chẵn, hãy thử nó với một vài giá trị khác nhau

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
81

Hàm

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 gần như không bị sai lệch, nhưng nó không hoàn hảo. Ví dụ: xu hướng làm tròn vẫn có thể được đưa ra nếu phần lớn các ràng buộc trong tập dữ liệu của bạn làm tròn lên chẵn thay vì làm tròn xuống. Các chiến lược giảm thiểu sai lệch thậm chí còn tốt hơn là “làm tròn một nửa thành chẵn” tồn tại, nhưng chúng hơi mơ hồ và chỉ cần thiết trong những trường hợp khắc nghiệt

Cuối cùng,

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 bị trục trặc giống như bạn đã thấy trong
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 do lỗi biểu diễn dấu phẩy động

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
82

Bạn không nên quan tâm đến các lỗi không thường xuyên này nếu độ chính xác của dấu phẩy động là đủ cho ứng dụng của bạn

Khi độ chính xác là tối quan trọng, bạn nên sử dụng lớp

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 của Python

Lớp >>> truncate(12.5) 12.0 >>> truncate(-5.963, 1) -5.9 >>> truncate(1.625, 2) 1.62 111

Mô-đun thập phân Python là một trong những tính năng “bao gồm pin” của ngôn ngữ mà bạn có thể không biết nếu bạn là người mới sử dụng Python. Nguyên tắc hướng dẫn của mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 có thể được tìm thấy trong tài liệu

Số thập phân “dựa trên một mô hình dấu phẩy động được thiết kế có tính đến con người và nhất thiết phải có một nguyên tắc hướng dẫn tối quan trọng – máy tính phải cung cấp một phép tính số học hoạt động giống như phép tính số học mà mọi người học ở trường. ” – đoạn trích từ đặc tả số học thập phân. (Nguồn)

Những lợi ích của mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 bao gồm

  • Biểu diễn thập phân chính xác.
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    103 thực sự là
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    103 và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    189 trả về
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    125, như bạn mong đợi
  • Bảo toàn chữ số có nghĩa. Khi bạn thêm
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    191 và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    192, kết quả là
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    193 với số 0 ở cuối được duy trì để biểu thị tầm quan trọng
  • Độ chính xác do người dùng thay đổi. Độ chính xác mặc định của mô-đun
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    112 là hai mươi tám chữ số, nhưng người dùng có thể thay đổi giá trị này để phù hợp với vấn đề hiện tại

Hãy khám phá cách làm tròn hoạt động trong mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112. Bắt đầu bằng cách nhập nội dung sau vào REPL của Python

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
83

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
196 trả về một đối tượng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
197 đại diện cho bối cảnh mặc định của mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112. Bối cảnh bao gồm độ chính xác mặc định và chiến lược làm tròn mặc định, trong số những thứ khác

Như bạn có thể thấy trong ví dụ trên, chiến lược làm tròn mặc định cho mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
800. Điều này phù hợp với chức năng
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp và phải là chiến lược làm tròn ưu tiên cho hầu hết các mục đích

Hãy khai báo một số bằng cách sử dụng lớp

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 của mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112. Để làm như vậy, hãy tạo một phiên bản
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 mới bằng cách chuyển một
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
805 chứa giá trị mong muốn

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
84

Ghi chú. Có thể tạo một phiên bản

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 từ một số dấu phẩy động, nhưng làm như vậy sẽ gây ra lỗi biểu diễn dấu phẩy động ngay lập tức. Ví dụ: kiểm tra điều gì sẽ xảy ra khi bạn tạo một phiên bản
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 từ số dấu phẩy động
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
103

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
85

Để duy trì độ chính xác chính xác, bạn phải tạo các phiên bản

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 từ các chuỗi chứa các số thập phân mà bạn cần

Để giải trí, hãy kiểm tra khẳng định rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 duy trì biểu diễn thập phân chính xác

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
86

ahhh. Điều đó thật thỏa mãn, phải không?

Làm tròn một

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111 được thực hiện bằng phương pháp
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
812

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
87

Được rồi, điều đó có thể trông hơi thú vị, vì vậy hãy chia nhỏ điều đó. Đối số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
813 trong
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
812 xác định số chữ số thập phân để làm tròn số. Vì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
815 có một chữ số thập phân nên số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
816 làm tròn đến một chữ số thập phân. Chiến lược làm tròn mặc định là “làm tròn một nửa thành chẵn”, vì vậy kết quả là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
24

Nhớ lại rằng hàm

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9, cũng sử dụng “chiến lược làm tròn một nửa thành chẵn”, không thể làm tròn chính xác
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
819 đến hai chữ số thập phân. Thay vì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
820,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
821 trả về
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
822. Nhờ biểu diễn thập phân chính xác của mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112, bạn sẽ không gặp vấn đề này với lớp
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
88

Một lợi ích khác của mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 là việc làm tròn sau khi thực hiện phép tính số học được xử lý tự động và các chữ số có nghĩa được giữ nguyên. Để thấy điều này trong thực tế, hãy thay đổi độ chính xác mặc định từ hai mươi tám chữ số thành hai, sau đó thêm các số
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
243 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
827

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
89

Để thay đổi độ chính xác, bạn gọi

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
196 và đặt thuộc tính
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
829. Nếu việc thiết lập thuộc tính trên một lệnh gọi hàm có vẻ kỳ lạ đối với bạn, thì bạn có thể làm điều này vì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
830 trả về một đối tượng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
197 đặc biệt đại diện cho ngữ cảnh bên trong hiện tại có chứa các tham số mặc định được sử dụng bởi mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112

Giá trị chính xác của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
243 cộng với
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
827 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
835. Vì độ chính xác hiện là hai chữ số và chiến lược làm tròn được đặt thành mặc định là "làm tròn một nửa thành chẵn", nên giá trị
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
835 sẽ tự động được làm tròn thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
837

Để thay đổi chiến lược làm tròn mặc định, bạn có thể đặt thuộc tính

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
838 thành bất kỳ một trong số các cờ. Bảng sau đây tóm tắt các cờ này và chiến lược làm tròn mà chúng triển khai

FlagChiến lược làm tròn

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
839Làm tròn lên
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
840Làm tròn xuống
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
841Cắt ngắn
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
842Làm tròn từ 0
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
843Làm tròn một nửa từ 0
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
844Làm tròn một nửa về 0
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
845Làm tròn một nửa về chẵn
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
846Làm tròn lên và làm tròn về 0

Điều đầu tiên cần lưu ý là sơ đồ đặt tên được sử dụng bởi mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 khác với những gì chúng tôi đã đồng ý trước đó trong bài viết. Ví dụ:
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
842 thực hiện chiến lược “làm tròn từ 0”, chiến lược này thực sự làm tròn các số âm xuống

Thứ hai, một số chiến lược làm tròn được đề cập trong bảng có thể trông không quen thuộc vì chúng ta chưa thảo luận về chúng. Bạn đã thấy cách hoạt động của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
845, vì vậy hãy xem hoạt động của từng người khác

Chiến lược

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
839 hoạt động giống như hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
174 mà chúng tôi đã xác định trước đó

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
00

Lưu ý rằng kết quả của

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
839 không đối xứng quanh 0

Chiến lược

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
840 hoạt động giống như chức năng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
203 của chúng tôi

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
01

Giống như

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
839, chiến lược
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
840 không đối xứng quanh 0

Các chiến lược

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
841 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
842 có phần nào gây nhầm lẫn. Cả
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
859 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
860 đều đối xứng quanh 0

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
02

Chiến lược

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
841 làm tròn các số về 0, giống như hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
108. Mặt khác,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
842 làm tròn mọi thứ từ 0. Đây rõ ràng là một điểm khác biệt so với thuật ngữ mà chúng ta đã đồng ý trước đó trong bài viết, vì vậy hãy ghi nhớ điều đó khi bạn làm việc với mô-đun
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112

Có ba chiến lược trong mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 cho phép làm tròn nhiều sắc thái hơn. Phương pháp
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
843 làm tròn mọi thứ đến số gần nhất và phá vỡ các ràng buộc bằng cách làm tròn từ 0

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
03

Lưu ý rằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
843 hoạt động giống như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
159 của chúng tôi và không giống như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268

Ngoài ra còn có một chiến lược

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
844 phá vỡ các mối quan hệ bằng cách làm tròn số không

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
04

Chiến lược làm tròn cuối cùng có sẵn trong mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 rất khác so với bất kỳ chiến lược nào chúng tôi đã thấy cho đến nay

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
05

Trong các ví dụ trên, có vẻ như

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
846 làm tròn mọi thứ về 0. Trên thực tế, đây chính xác là cách hoạt động của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
846, trừ khi kết quả làm tròn kết thúc bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
125 hoặc
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
261. Trong trường hợp đó, số được làm tròn từ 0

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
06

Trong ví dụ đầu tiên, số

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
876 trước tiên được làm tròn về 0 ở vị trí thập phân thứ hai, tạo ra
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
877. Vì
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
877 không kết thúc bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
125 hoặc
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
261, nên nó được giữ nguyên. Mặt khác, ________ 5881 làm tròn về 0 ở chữ số thập phân thứ hai, dẫn đến số _______ 228. Điều này kết thúc bằng một
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
261, do đó, vị trí thập phân đầu tiên sau đó được làm tròn từ 0 đến
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
24

Trong phần này, chúng tôi chỉ tập trung vào các khía cạnh làm tròn của mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112. Có một số lượng lớn các tính năng khác làm cho
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
112 trở thành một lựa chọn tuyệt vời cho các ứng dụng mà độ chính xác của dấu phẩy động tiêu chuẩn là không đủ, chẳng hạn như ngân hàng và một số vấn đề trong tính toán khoa học

Để biết thêm thông tin về

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
111, hãy xem Hướng dẫn bắt đầu nhanh trong tài liệu Python

Tiếp theo, hãy chuyển sự chú ý của chúng ta sang hai yếu tố chính trong ngăn xếp khoa học dữ liệu và máy tính khoa học của Python. NumPy và gấu trúc

Loại bỏ các quảng cáo

Làm tròn mảng NumPy

Trong lĩnh vực khoa học dữ liệu và tính toán khoa học, bạn thường lưu trữ dữ liệu của mình dưới dạng NumPy

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
888. Một trong những tính năng mạnh mẽ nhất của NumPy là việc sử dụng vector hóa và quảng bá để áp dụng các thao tác cho toàn bộ mảng cùng một lúc thay vì từng phần tử một

Hãy tạo một số dữ liệu bằng cách tạo một mảng 3×4 NumPy gồm các số giả ngẫu nhiên

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
07

Trước tiên, chúng tôi khởi tạo mô-đun

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
889 để bạn có thể dễ dàng tái tạo đầu ra. Sau đó, một mảng 3×4 NumPy gồm các số dấu phẩy động được tạo bằng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
890

Ghi chú. Bạn sẽ cần phải

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
891 trước khi nhập mã trên vào REPL của mình nếu bạn chưa có NumPy trong môi trường của mình. Nếu bạn đã cài đặt Python với Anaconda, bạn đã cài đặt

Nếu bạn chưa từng sử dụng NumPy trước đây, bạn có thể xem phần giới thiệu nhanh trong phần Bắt đầu hình dạng của Brad Solomon's Look Ma, No For-Loops. Lập trình mảng với NumPy tại đây tại Real Python

Để biết thêm thông tin về mô-đun ngẫu nhiên của NumPy, hãy xem phần PRNG dành cho Mảng trong Tạo dữ liệu ngẫu nhiên trong Python (Hướng dẫn) của Brad

Để làm tròn tất cả các giá trị trong mảng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228, bạn có thể chuyển
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 làm đối số cho hàm
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
894. Số vị trí thập phân mong muốn được đặt với đối số từ khóa
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
154. Chiến lược nửa tròn đến chẵn được sử dụng, giống như hàm
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 tích hợp sẵn của Python

Ví dụ: sau đây làm tròn tất cả các giá trị trong

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 đến ba chữ số thập phân

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
08

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
894 có lỗi biểu diễn dấu phẩy động, giống như
def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
9 là

Ví dụ: giá trị ở hàng thứ ba của cột đầu tiên trong mảng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
228 là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
001. Khi bạn làm tròn số này đến ba chữ số thập phân bằng cách sử dụng chiến lược "làm tròn một nửa thành số chẵn", bạn mong đợi giá trị là
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
002. Nhưng bạn có thể thấy trong kết quả từ
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
894 rằng giá trị được làm tròn thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
004. Tuy nhiên, giá trị
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
005 ở hàng đầu tiên của cột thứ hai làm tròn chính xác thành
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
006

Nếu bạn cần làm tròn dữ liệu trong mảng của mình thành số nguyên, NumPy cung cấp một số tùy chọn

  • >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    007
  • >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    008
  • >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    009
  • >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    010

Hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
011 làm tròn mọi giá trị trong mảng thành số nguyên gần nhất lớn hơn hoặc bằng giá trị ban đầu

>>>

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
09

Này, chúng tôi đã phát hiện ra một số mới. số 0 âm

Trên thực tế, tiêu chuẩn IEEE-754 yêu cầu triển khai cả số 0 dương và âm. Những gì có thể sử dụng là có cho một cái gì đó như thế này?

Một cách không chính thức, người ta có thể sử dụng ký hiệu “

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
012” cho một giá trị âm được làm tròn thành 0. Ký hiệu này có thể hữu ích khi một dấu âm là quan trọng; . (Nguồn)

Để làm tròn mọi giá trị xuống số nguyên gần nhất, hãy sử dụng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
013

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
0

Bạn cũng có thể cắt ngắn từng giá trị thành phần nguyên của nó bằng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
014

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
1

Cuối cùng, để làm tròn đến số nguyên gần nhất bằng cách sử dụng chiến lược “làm tròn một nửa thành chẵn”, hãy sử dụng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
015

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
2

Bạn có thể nhận thấy rằng rất nhiều chiến lược làm tròn mà chúng ta đã thảo luận trước đó bị thiếu ở đây. Đối với phần lớn các tình huống, hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
016 là tất cả những gì bạn cần. Nếu bạn cần triển khai một chiến lược khác, chẳng hạn như
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268, bạn có thể thực hiện điều đó bằng một sửa đổi đơn giản

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
3

Nhờ các hoạt động được vector hóa của NumPy, điều này hoạt động như bạn mong đợi

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
4

Bây giờ bạn đã là một bậc thầy về làm tròn NumPy, hãy cùng xem xét về khoa học dữ liệu nặng ký khác của Python. thư viện gấu trúc

Loại bỏ các quảng cáo

Gấu trúc làm tròn >>> truncate(12.5) 12.0 >>> truncate(-5.963, 1) -5.9 >>> truncate(1.625, 2) 1.62 018 và >>> truncate(12.5) 12.0 >>> truncate(-5.963, 1) -5.9 >>> truncate(1.625, 2) 1.62 019

Thư viện Pandas đã trở thành một yếu tố chính cho các nhà khoa học dữ liệu và nhà phân tích dữ liệu làm việc với Python. Theo lời của Joe Wyndham của Real Python

Pandas là công cụ thay đổi cuộc chơi cho khoa học dữ liệu và phân tích, đặc biệt nếu bạn đến với Python vì bạn đang tìm kiếm thứ gì đó mạnh mẽ hơn Excel và VBA. (Nguồn)

Ghi chú. Trước khi tiếp tục, bạn cần phải

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
020 nếu bạn chưa có nó trong môi trường của mình. Như trường hợp của NumPy, nếu bạn đã cài đặt Python với Anaconda, bạn sẽ sẵn sàng sử dụng

Hai cấu trúc dữ liệu chính của Pandas là

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
019, theo thuật ngữ rất lỏng lẻo hoạt động giống như một bảng tính Excel và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
018, mà bạn có thể coi là một cột trong bảng tính. Cả hai đối tượng
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
018 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
019 cũng có thể được làm tròn một cách hiệu quả bằng cách sử dụng các phương pháp
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
025 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
026

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
5

Phương pháp

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
026 cũng có thể chấp nhận từ điển hoặc
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
018, để chỉ định độ chính xác khác nhau cho mỗi cột. Chẳng hạn, các ví dụ sau đây cho thấy cách làm tròn cột đầu tiên của
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
029 đến một chữ số thập phân, cột thứ hai đến hai và cột thứ ba đến ba chữ số thập phân

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
6

Nếu bạn cần làm tròn linh hoạt hơn, bạn có thể áp dụng các hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
202,
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
155 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
032 của NumPy cho các đối tượng Pandas
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
018 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
019

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
7

Hàm

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
268 đã sửa đổi từ phần trước cũng sẽ hoạt động ở đây

>>>

def truncate(n, decimals=0):
    multiplier = 10 ** decimals
    return int(n * multiplier) / multiplier
8

Xin chúc mừng, bạn đang trên đường đạt đến trình độ thành thạo. Bây giờ bạn biết rằng có nhiều cách để làm tròn số hơn là có nhiều cách kết hợp taco. (Chà… có lẽ không. ) Bạn có thể triển khai nhiều chiến lược làm tròn bằng Python thuần túy và bạn đã nâng cao kỹ năng của mình về làm tròn các mảng NumPy và các đối tượng

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
018 và
>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
019

Chỉ còn một bước nữa. biết khi nào nên áp dụng chiến lược phù hợp

Ứng dụng và thực tiễn tốt nhất

Đoạn đường cuối cùng trên con đường hoàn thiện kỹ năng điêu luyện của bạn là hiểu khi nào nên áp dụng kiến ​​thức mới tìm được của mình. Trong phần này, bạn sẽ tìm hiểu một số phương pháp hay nhất để đảm bảo bạn làm tròn số đúng cách

Lưu trữ nhiều hơn và làm tròn muộn

Khi bạn xử lý các tập dữ liệu lớn, bộ nhớ có thể là một vấn đề. Trong hầu hết các cơ sở dữ liệu quan hệ, mỗi cột trong bảng được thiết kế để lưu trữ một kiểu dữ liệu cụ thể và các kiểu dữ liệu số thường được gán độ chính xác để giúp tiết kiệm bộ nhớ

Ví dụ: cảm biến nhiệt độ có thể báo cáo nhiệt độ trong lò công nghiệp hoạt động lâu dài cứ sau mười giây, chính xác đến tám chữ số thập phân. Các bài đọc từ điều này được sử dụng để phát hiện các biến động bất thường về nhiệt độ có thể chỉ ra sự cố của bộ phận làm nóng hoặc một số bộ phận khác. Vì vậy, có thể có một tập lệnh Python đang chạy để so sánh từng lần đọc đến với lần đọc cuối cùng để kiểm tra các biến động lớn

Các bài đọc từ cảm biến này cũng được lưu trữ trong cơ sở dữ liệu SQL để có thể tính toán nhiệt độ trung bình hàng ngày bên trong lò mỗi ngày vào lúc nửa đêm. Nhà sản xuất bộ phận làm nóng bên trong lò khuyến nghị thay thế bộ phận này bất cứ khi nào nhiệt độ trung bình hàng ngày giảm xuống dưới mức bình thường

>>> truncate(12.5)
12.0

>>> truncate(-5.963, 1)
-5.9

>>> truncate(1.625, 2)
1.62
038 độ

Đối với phép tính này, bạn chỉ cần độ chính xác ba chữ số thập phân. Nhưng bạn biết từ sự cố tại Sàn giao dịch chứng khoán Vancouver rằng việc loại bỏ quá nhiều độ chính xác có thể ảnh hưởng nghiêm trọng đến tính toán của bạn

Nếu bạn có dung lượng trống, bạn nên lưu trữ dữ liệu ở độ chính xác đầy đủ. Nếu lưu trữ là một vấn đề, một nguyên tắc nhỏ là lưu trữ ít nhất hai hoặc ba chữ số thập phân chính xác hơn mức bạn cần cho phép tính của mình

Cuối cùng, khi bạn tính toán nhiệt độ trung bình hàng ngày, bạn nên tính toán nó với độ chính xác đầy đủ có sẵn và làm tròn câu trả lời cuối cùng

Loại bỏ các quảng cáo

Tuân thủ các quy định về tiền tệ địa phương

Khi bạn gọi một tách cà phê với giá 2 đô la. 40 tại quán cà phê, người bán thường thêm một khoản thuế bắt buộc. Số tiền thuế đó phụ thuộc rất nhiều vào vị trí địa lý của bạn, nhưng để tranh luận, hãy nói rằng đó là 6%. Thuế sẽ được thêm vào là $0. 144. Bạn có nên làm tròn số tiền này lên tới $0 không. 15 hoặc xuống còn $0. 14?

Các tình huống như thế này cũng có thể phát sinh khi bạn chuyển đổi một loại tiền tệ này sang một loại tiền tệ khác. Năm 1999, Ủy ban Kinh tế và Tài chính Châu Âu đã hệ thống hóa việc sử dụng chiến lược “làm tròn nửa số 0” khi chuyển đổi tiền tệ sang đồng Euro, nhưng các loại tiền tệ khác có thể đã áp dụng các quy định khác

Một kịch bản khác, "Làm tròn Thụy Điển", xảy ra khi đơn vị tiền tệ tối thiểu ở cấp độ kế toán ở một quốc gia nhỏ hơn đơn vị tiền tệ vật chất thấp nhất. Ví dụ: nếu một tách cà phê có giá 2 đô la. 54 sau thuế, nhưng không có đồng xu 1 xu nào được lưu hành, bạn sẽ làm gì?

Cách xử lý các tình huống như thế này thường do chính phủ của một quốc gia quyết định. Bạn có thể tìm thấy danh sách các phương pháp làm tròn số được các quốc gia khác nhau sử dụng trên Wikipedia

Nếu bạn đang thiết kế phần mềm để tính toán tiền tệ, bạn phải luôn kiểm tra luật pháp và quy định của địa phương tại địa điểm của người dùng của bạn

Khi nghi ngờ, làm tròn hòa đến chẵn

Khi bạn làm tròn số trong các tập dữ liệu lớn được sử dụng trong các tính toán phức tạp, mối quan tâm chính là hạn chế sự gia tăng của lỗi do làm tròn

Trong tất cả các phương pháp mà chúng ta đã thảo luận trong bài viết này, chiến lược “làm tròn một nửa thành chẵn” giảm thiểu sai lệch làm tròn tốt nhất. May mắn thay, Python, NumPy và Pandas đều mặc định cho chiến lược này, do đó, bằng cách sử dụng các hàm làm tròn tích hợp sẵn, bạn đã được bảo vệ tốt

Bản tóm tắt

chà. Thật là một cuộc hành trình này đã được

Trong bài viết này, bạn đã học được rằng

  • Có nhiều chiến lược làm tròn khác nhau mà giờ đây bạn đã biết cách triển khai trong Python thuần túy

  • Mọi chiến lược làm tròn đều đưa ra xu hướng làm tròn và chiến lược “làm tròn một nửa thành chẵn” giảm thiểu tốt xu hướng này, hầu hết thời gian

  • Cách máy tính lưu trữ số dấu phẩy động trong bộ nhớ tự nhiên gây ra lỗi làm tròn tinh vi, nhưng bạn đã học cách khắc phục điều này với mô-đun

    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    112 trong thư viện chuẩn của Python

  • Bạn có thể làm tròn các mảng NumPy và các đối tượng Pandas

    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    018 và
    >>> truncate(12.5)
    12.0
    
    >>> truncate(-5.963, 1)
    -5.9
    
    >>> truncate(1.625, 2)
    1.62
    
    019

  • Có các phương pháp hay nhất để làm tròn với dữ liệu trong thế giới thực

Lấy bài kiểm tra. Kiểm tra kiến ​​thức của bạn với bài kiểm tra tương tác “Làm tròn số trong Python” của chúng tôi. Sau khi hoàn thành, bạn sẽ nhận được điểm số để có thể theo dõi quá trình học tập của mình theo thời gian

Lấy bài kiểm tra "

Nếu bạn quan tâm đến việc tìm hiểu thêm và tìm hiểu chi tiết về mọi thứ chúng tôi đã đề cập, các liên kết bên dưới sẽ khiến bạn bận rộn trong một thời gian dài

Ít nhất, nếu bạn thích bài viết này và học được điều gì đó mới từ nó, hãy chuyển nó cho bạn bè hoặc thành viên trong nhóm. Hãy chắc chắn để chia sẻ suy nghĩ của bạn với chúng tôi trong các ý kiến. Chúng tôi muốn nghe một số câu chuyện về trận chiến liên quan đến vòng tròn của riêng bạn

Python hạnh phúc

Tài nguyên bổ sung

Chiến lược làm tròn và sai lệch

  • Làm tròn, Wikipedia
  • Làm tròn số mà không cần thêm độ lệch, từ ZipCPU

Thông số kỹ thuật dấu phẩy động và số thập phân

  • IEEE-754, Wikipedia
  • Đặc tả số học thập phân chung của IBM

Bài đọc thú vị

  • Điều mà mọi nhà khoa học máy tính nên biết về số học dấu phẩy động, David Goldberg, ACM Computing Surveys, tháng 3 năm 1991
  • Số học dấu phẩy động. Các vấn đề và hạn chế, từ python. tổ chức
  • Tại sao các tầng chia số nguyên của Python, của Guido van Rossum

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

Gửi cho tôi thủ thuật Python »

Giới thiệu về David Amos

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?
Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

David là một nhà văn, lập trình viên và nhà toán học đam mê khám phá toán học thông qua mã

» Thông tin thêm về David


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

Adriana

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

Geir Arne

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Phép chia số nguyên trong Python có làm tròn lên hay xuống không?

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Phép chia số nguyên có làm tròn lên hay xuống không?

Phép chia số nguyên làm tròn về 0 . Điều này có nghĩa là, ví dụ, kết quả của phép chia số nguyên 7/5 sẽ có số thực 1. 4 là kết quả trung gian và được làm tròn theo hướng 0 sẽ cho kết quả là 1.

Python xử lý phép chia số nguyên như thế nào?

Trong Python 3. x, toán tử dấu gạch chéo ("/") thực hiện phép chia đúng cho tất cả các loại kể cả số nguyên và do đó, e. g. 3/2==1. 5. Kết quả là loại dấu phẩy động ngay cả khi cả hai đầu vào là số nguyên. 4/2 sinh 2. 0.

Python có làm tròn 0 không. 5 tăng hay giảm?

Trong Python, hàm round() làm tròn lên hay xuống? . Dành cho . Cho =0. 5, hàm round() làm tròn số về số chẵn gần nhất.