Hàm
round[number, ndigits]5 trả về một số điểm nổi được làm tròn vào số số thập phân được chỉ định.
Thí dụ
number = 13.46
# round 13.46 to the nearest integer
rounded_number = round[number]
print[rounded_number]
# Output: 13
vòng [] cú pháp
Cú pháp của hàm
round[number, ndigits]5 là:
round[number, ndigits]
tham số vòng []
Hàm
round[number, ndigits]5 có hai tham số:
- Số - Số được làm tròn - the number to be rounded
- ndigits [tùy chọn] - số lên mà số đã cho được làm tròn; mặc định là 0 - number up to which the given number is rounded; defaults to 0
vòng [] giá trị trả về
Hàm vòng [] trả về
- Số nguyên gần nhất với số đã cho nếu
round[number, ndigits]
8 không được cung cấp - số được làm tròn đến
round[number, ndigits]
8 chữ số nếuround[number, ndigits]
8 được cung cấp
Ví dụ 1: Làm thế nào vòng [] hoạt động trong Python?
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
Đầu ra
10 11 6
Ví dụ 2: Vòng một số cho số lượng số thập phân đã cho
print[round[2.665, 2]]
print[round[2.675, 2]]
Đầu ra
2.67 2.67
Ví dụ 2: Vòng một số cho số lượng số thập phân đã cho: The behavior of
round[number, ndigits]5 for floats can be surprising. Notice
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
2 gives # for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
3 instead of the expected # for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
4. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a float.Lưu ý: Hành vi của
round[number, ndigits]5 đối với phao có thể gây ngạc nhiên. Thông báo
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
2 cung cấp # for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
3 thay vì dự kiến # for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
4. Đây không phải là một lỗi: đó là kết quả của thực tế là hầu hết các phân số thập phân không thể được biểu diễn chính xác dưới dạng phao.2.67499999999999982236431605997495353221893310546875
Khi thập phân
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
5 được chuyển đổi thành số dấu phẩy động nhị phân, nó lại được thay thế bằng xấp xỉ nhị phân, có giá trị chính xác là:Do đó, nó được làm tròn xuống còn 2,67.
from decimal import Decimal
# normal float
num = 2.675
print[round[num, 2]]
# using decimal.Decimal [passed float as string for precision]
num = Decimal['2.675']
print[round[num, 2]]
Đầu ra
2.67 2.68
Tôi cảm thấy buộc phải cung cấp một đối trọng với câu trả lời của Ashwini Chaudhary. Mặc dù xuất hiện, hình thức hai đối số của hàm
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
7 không làm tròn một con trăn nổi vào một số vị trí thập phân nhất định và nó thường không phải là giải pháp bạn muốn, ngay cả khi bạn nghĩ đó là. Hãy để tôi giải thích...Khả năng làm tròn [python] nổi vào một số vị trí thập phân là thứ thường được yêu cầu, nhưng hóa ra hiếm khi là những gì thực sự cần thiết. Câu trả lời đơn giản
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
8 là một thứ gây phiền toái hấp dẫn: có vẻ như nó làm những gì bạn muốn, nhưng nhờ thực tế là những chiếc phao Python được lưu trữ bên trong nhị phân, nó đang làm một cái gì đó khá tinh vi hơn. Xem xét ví dụ sau:>>> round[52.15, 1]
52.1
Với sự hiểu biết ngây thơ về những gì
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
7 làm, điều này có vẻ sai: Chắc chắn nó sẽ làm tròn lên đến 10 11 60 chứ không phải xuống
10 11 61? Để hiểu tại sao những hành vi như vậy không thể dựa vào, bạn cần đánh giá cao rằng trong khi điều này trông giống như một hoạt động thập phân đơn giản, nó không đơn giản.
Vì vậy, đây là những gì thực sự xảy ra trong ví dụ trên. . Vì vậy, để có được từ số nguyên chữ gốc đến đầu ra được hiển thị, máy móc cơ bản đã thực hiện bốn chuyển đổi riêng biệt giữa các định dạng nhị phân và thập phân, hai theo mỗi hướng. Phá vỡ nó xuống [và với những từ chối thông thường về giả sử định dạng nhị phân của IEEE 754, các quy tắc tròn đến chay-crom-chay và IEEE 754]:
Đầu tiên, chữ số
10 11 6
3 được phân tích cú pháp và chuyển đổi thành phao python. Số thực tế được lưu trữ là10 11 6
4, hoặc10 11 6
5.Bên trong bước đầu tiên của hoạt động
7, Python tính toán chuỗi thập phân 1 chữ số gần nhất với số được lưu trữ. Vì số được lưu trữ đó là một liên lạc dưới giá trị ban đầu là# for integers
print[round[10]]
# for floating pointprint[round[10.7]]
# even choiceprint[round[5.5]]
10 11 6
3, chúng tôi cuối cùng đã làm tròn xuống và nhận được một chuỗi10 11 6
1. Điều này giải thích lý do tại sao chúng tôi nhận được10 11 6
1 là đầu ra cuối cùng thay vì10 11 6
0.Sau đó, trong bước thứ hai của hoạt động
7, Python biến chuỗi đó trở lại thành một chiếc phao, nhận số điểm nổi nhị phân gần nhất thành# for integers
print[round[10]]
# for floating pointprint[round[10.7]]
# even choiceprint[round[5.5]]
10 11 6
1, hiện là
3 hoặcprint[round[2.665, 2]] print[round[2.675, 2]]
4.print[round[2.665, 2]] print[round[2.675, 2]]
Cuối cùng, là một phần của vòng lặp in-eval [repl] của Python, giá trị dấu phẩy động được hiển thị [theo số thập phân]. Điều đó liên quan đến việc chuyển đổi giá trị nhị phân trở lại một chuỗi thập phân, nhận
10 11 6
1 làm đầu ra cuối cùng.
Trong Python 2.7 và sau đó, chúng ta có tình huống dễ chịu rằng hai chuyển đổi trong bước 3 và 4 hủy bỏ nhau. Đó là do sự lựa chọn của Python về việc triển khai
print[round[2.665, 2]]
print[round[2.675, 2]]
6, tạo ra giá trị thập phân ngắn nhất được đảm bảo để làm tròn chính xác cho phao thực tế. Một hậu quả của lựa chọn đó là nếu bạn bắt đầu với bất kỳ số thập phân [không quá lớn, không quá nhỏ] với 15 hoặc ít hơn các chữ số có ý nghĩa thì phao tương ứng sẽ được hiển thị hiển thị các chữ số chính xác đó:round[number, ndigits]0
Thật không may, điều này làm tăng thêm ảo tưởng rằng Python đang lưu trữ các giá trị theo số thập phân. Không phải như vậy trong Python 2.6, mặc dù! Đây là ví dụ ban đầu được thực hiện trong Python 2.6:
round[number, ndigits]1
Chúng tôi không chỉ làm tròn theo hướng ngược lại, nhận
10 11 60 thay vì
10 11 61, mà giá trị được hiển thị thậm chí không in là
10 11 60! Hành vi này đã gây ra nhiều báo cáo cho trình theo dõi lỗi Python dọc theo các dòng "Vòng bị phá vỡ!". Nhưng đó không phải là
# for integers
print[round[10]]
# for floating point
print[round[10.7]]
# even choice
print[round[5.5]]
7 bị hỏng, đó là kỳ vọng của người dùng. .Phiên bản ngắn: Nếu bạn đang sử dụng vòng hai đối số và bạn đang mong đợi hành vi có thể dự đoán được từ một xấp xỉ nhị phân đến một vòng thập phân của một xấp xỉ nhị phân với một trường hợp nửa thập phân, bạn đang gặp rắc rối.
Vì vậy, đủ với cuộc tranh luận "hai đối số là xấu". Thay vào đó, bạn nên sử dụng cái gì? Có một vài khả năng, tùy thuộc vào những gì bạn đang cố gắng làm.
Nếu bạn làm tròn cho mục đích hiển thị, thì bạn không muốn có kết quả nổi; Bạn muốn một chuỗi. Trong trường hợp đó, câu trả lời là sử dụng định dạng chuỗi:
round[number, ndigits]
2Ngay cả sau đó, người ta phải nhận thức được biểu diễn nhị phân nội bộ để không ngạc nhiên trước hành vi của các trường hợp nửa chừng trong thập phân rõ ràng.
round[number, ndigits]
3Nếu bạn đang hoạt động trong một bối cảnh mà vấn đề quan trọng là các trường hợp nửa chừng trong thập phân được làm tròn [ví dụ: trong một số bối cảnh tài chính], bạn có thể muốn thể hiện số của mình bằng cách sử dụng loại
2.67 2.67
2. Thực hiện một vòng thập phân trên loại2.67 2.67
2 có ý nghĩa hơn nhiều so với loại nhị phân [không kém, làm tròn đến một số lượng cố định của các địa điểm nhị phân có ý nghĩa hoàn hảo trên một loại nhị phân]. Hơn nữa, mô -đun
6 cho phép bạn kiểm soát tốt hơn chế độ làm tròn. Trong Python 3,# for integers
print[round[10]]
# for floating pointprint[round[10.7]]
# even choiceprint[round[5.5]]
7 thực hiện công việc trực tiếp. Trong Python 2, bạn cần phương pháp# for integers
print[round[10]]
# for floating pointprint[round[10.7]]
# even choiceprint[round[5.5]]
2.67 2.67
6.round[number, ndigits]
4Trong những trường hợp hiếm hoi, phiên bản hai đối số của
7 thực sự là những gì bạn muốn: có lẽ bạn đang nổi nổi vào các thùng có kích thước# for integers
print[round[10]]
# for floating pointprint[round[10.7]]
# even choiceprint[round[5.5]]
2.67 2.67
8 và bạn không đặc biệt quan tâm đến các trường hợp biên giới đi theo cách nào. Tuy nhiên, những trường hợp này rất hiếm và rất khó để biện minh cho sự tồn tại của phiên bản hai đối số của
7 tích hợp dựa trên những trường hợp đó.# for integers
print[round[10]]
# for floating pointprint[round[10.7]]
# even choiceprint[round[5.5]]