Tránh lỗi làm tròn trong kết quả công thức (Microsoft Excel)
Nick lưu ý rằng công thức “= 0.28100-INT (0.28100) = 0” trả về Sai mặc dù rõ ràng là đúng. Anh ấy tin rằng vấn đề liên quan đến làm tròn và cách máy tính sử dụng số học nhị phân, v.v. Nick đang sử dụng công thức như một phần của câu lệnh IF lớn hơn và anh ấy giả định rằng có những lỗi làm tròn khác trong Excel có thể tiếp cận và cắn anh ta . Anh ấy tự hỏi liệu có cách nào đơn giản để tránh những cạm bẫy của công thức như thế này không.
Trước khi xem xét các cách đơn giản để tránh loại vấn đề này, điều quan trọng là phải hiểu tại sao vấn đề tồn tại. Như Nick lưu ý, nó thực sự liên quan đến số học nhị phân và thực tế là Excel làm tròn thông tin. Phía sau, Excel luôn làm tròn thông tin đến 15 chữ số. Hãy xem xét phép tính mà Nick đang làm việc:
=0.28100-INT(0.28100)=0
Khi Excel tính toán điều này lần đầu tiên, thứ tự ưu tiên theo sau là Excel sẽ tính toán nó theo cách sau:
=(0.28100-INT(0.28100))=0
Lưu ý thêm bộ dấu ngoặc đơn. Kết quả của mọi thứ ở bên trái của dấu bằng cuối cùng đó là 3.55E-15, có nghĩa là bạn kết thúc với công thức (tay dài) này:
=0.00000000000000355=0
Điều này rõ ràng là không đúng, đó là lý do tại sao bạn nhận được giá trị Sai trả về. Có một số cách để “khắc phục” tình trạng này. Trong trường hợp này, có lẽ đơn giản nhất là thay đổi công thức của bạn để loại bỏ sự cần thiết phải so sánh với số không:
=0.28100=INT(0.28100)
Công thức này trả về True, như bạn mong đợi. Tuy nhiên, điều này có thể không phù hợp với mọi nhu cầu của bạn. Vì vậy, một quy tắc ngón tay cái tốt hơn để tránh các vấn đề là không bao giờ dựa vào việc làm tròn số của Excel. Bạn làm điều này bằng cách thực hiện làm tròn rõ ràng của riêng bạn, như được hiển thị với các công thức sau:
=INT(0.28100)-INT(0.28100)=0 =ROUND(0.28100,0)-INT(0.28100)=0 =ROUND(0.28100,5)-ROUND(0.28100,5)=0
Lưu ý rằng bạn, trong những trường hợp này, không cho phép Excel thực hiện các phép tính với độ chính xác tối đa vì điều đó có thể gây ra một số kết quả không mong muốn khi bạn so sánh với một giá trị cụ thể, chẳng hạn như 0.
Thay vào đó, bạn đang buộc Excel làm tròn các giá trị — tất cả các giá trị mà bạn đang làm việc — đến bất kỳ mức độ chính xác nào bạn cần để so sánh.
Một cách tiếp cận khác là không thực hiện so sánh với một giá trị chính xác, chẳng hạn như số không. Thay vào đó, hãy cho phép một số “yếu tố fudge” trong phép so sánh, điều này cho phép các vấn đề làm tròn. Ví dụ: bạn có thể xác định rằng bạn chỉ quan tâm đến việc so sánh có chính xác đến một phần trăm của bất kỳ đơn vị nào bạn đang giả định hay không. Trong trường hợp đó, công thức gốc có thể được sửa đổi theo cách này:
=0.28100-INT(0.28100)<0.01
Điều này trả về True, như người ta mong đợi.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (8143) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: