Tôi vừa đọc lại What New trong Python 3.0 và nó nói:
Chiến lược làm tròn hàm () và kiểu trả về đã thay đổi. Các trường hợp nửa chừng chính xác bây giờ được làm tròn đến kết quả thậm chí gần nhất thay vì từ 0. (Ví dụ: vòng (2.5) bây giờ trả về 2 thay vì 3.)
và tài liệu cho vòng :
Đối với các loại tích hợp hỗ trợ round (), các giá trị được làm tròn đến bội số gần nhất của 10 với công suất trừ n; Nếu hai bội số gần nhau như nhau, làm tròn được thực hiện theo lựa chọn chẵn
Vì vậy, theo v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
như tôi đã mong đợi Tuy nhiên, bây giờ theo v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Điều này có vẻ phản trực giác và trái ngược với những gì tôi hiểu về làm tròn số (và bị ràng buộc để làm tăng người lên). Tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi nhưng cho đến khi tôi đọc nó, tôi nghĩ rằng tôi biết làm tròn có nghĩa là gì: - / Tôi chắc chắn tại thời điểm v3 được giới thiệu, phải có một số cuộc thảo luận về điều này, nhưng tôi không thể tìm thấy lý do chính đáng trong tìm kiếm của tôi.
- Có ai có cái nhìn sâu sắc về lý do tại sao điều này đã được thay đổi thành này?
- Có bất kỳ ngôn ngữ lập trình chính thống nào khác (ví dụ: C, C ++, Java, Perl, ..) thực hiện kiểu làm tròn này (với tôi không nhất quán) không?
Tôi đang thiếu gì ở đây?
CẬP NHẬT: Nhận xét của @ Li-aungYip lại "Làm tròn ngân hàng" đã cho tôi cụm từ / từ khóa tìm kiếm phù hợp để tìm kiếm và tôi đã tìm thấy câu hỏi SO này: Tại sao .NET sử dụng làm tròn ngân hàng làm mặc định? , vì vậy tôi sẽ đọc nó một cách cẩn thận.