Vấn đề với hàm Round của Python

Không biết hàm round của Python hoạt động thế nào nhỉ? Thật sự bối rối lúc mò ra cái này
Mọi người xem thử ví dụ này, làm tròn đến 2 chữ số lẻ sau dấu chấm thập phân.

>>> round(3.454, 2) # 4 < 5 nên làm tròn xuống
3.45
>>> round(3.455, 2) # 5 >= 5 nên làm tròn lên
2.46
>>> round(3.456, 2) # 6 >= 5 nên làm tròn lên
3.46

Mọi thứ đúng logic, cho tới khi em thử cái này

>>> round(2.674, 2) # 4 < 5 nên làm tròn xuống, hợp lý
2.67
>>> round(2.675, 2) # 5 >= 5 nhưng vẫn làm tròn xuống, mẫu thuẫn ví dụ trên
2.67
>>> round(2.676, 2) # 6 >= 5 nên làm tròn lên, không có gì bàn cãi
2.68

Không biết là nó logic ở chỗ nào nhỉ? Em đang dùng Python 3.7.0 32bit

Note The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information.
https://docs.python.org/3/library/functions.html#round
Trong doc có nói đó bạn

3 Likes

úi dời, cái ví dụ trong môn phương pháp tính của e vô tình trùng với cái này luôn, ghê thiệc :open_mouth:

2 Likes

Muốn chính xác chắc phải nhân với 1000 hoặc dùng thư viện toán bên ngoài

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?