Hàm MATCH số thập phân gần đúng bị lỗi, ai giải thích được? (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

bebo021999

Thành viên gạo cội
Tham gia
26/1/11
Bài viết
6,037
Được thích
8,813
Giới tính
Nam
Nghề nghiệp
GPE
Tình cờ lang thang vào 1 trang web nước ngoài thấy có vấn đề này mà mình tìm không ra

Có dãy số thập phân tăng dần tại vùng A1: D1, ví dụ:
{1.8; 5.2; 6.7; 9.3}

Tại ô A4 chứa giá trị điều kiện.
Công thức tại ô B4 tìm vị trí của giá trị A4 trong vùng:
=MATCH(A4,$A$1:$D$1,1)

Xét tại A4:
Gõ tay vào số 5.3 ===>Kết quả là 2
Gõ tay vào số 5.2 ===>Kết quả là 2

Tuy nhiên nếu A4 là kết quả của 1 phép tính. Ví dụ: =7.1-1.9
Kết quả là: 1

Mình thử các trường hợp sau:


Thay phép tính vào:
=MATCH(7.1-1.9,$A$1:$D$1,1) =>1

Thay đổi đưa 1 số chẵn vào:

=MATCH(7-1.8,$A$1:$D$1,1) =>2

Dùng ROUND

=MATCH(ROUND(7.1-1.9,1),$A$1:$D$1,1)=>2

Như vậy 3 trường hợp này cùng ra kết quả là 5.2, nhưng hàm MATCH lại phân biệt?


Nhờ các cao thủ chỉ giáo.
 
  • match_type = 0: Hàm sẽ dò tìm chính xác giá trị lookup_value trong lookup_array, nếu không tìm thấy hàm sẽ báo lỗi #N/A.

  • match_type = 1(hoặc để trống): Hàm sẽ dò tìm giá trị lớn nhất trong lookup_array mà có giá trị <= giá trị của lookup_value. Trường hợp này, các phấn tử trong lookup_array phải được sắp xếp từ nhỏ đến lớn (..-2,-1,0,1,2…A,B,C..Z…False, True).

  • match_type = -1: Hàm sẽ dò tìm giá trị nhỏ nhất trong lookup_array mà có giá trị >= giá trị của lookup_value. Trường hợp này, các phấn tử trong lookup_array phải được sắp xếp từ lớn đến nhỏ ( True, False, Z…A,..2,1,0,-1,-2..).
  • Theo tôi nghĩ, các phép tính luôn bị giới hạn bởi kiểu dữ liệu. Mình "nghĩ" trong đầu 7,1-1,9 =5,2 nhưng excel không hiểu như thế. Giá trị phép trừ 7,1-1,9 và giá trị gõ trực tiếp 5,2 có kiểu dữ liệu khác nhau, nên có sai số trong đó, mặc dù hiển thị là như nhau.
 
Cám ơn Linh.
Dãy số này thỏa điều kiện tăng dần cho match_type =1
Nhưng kết quả sai
 
Tình cờ lang thang vào 1 trang web nước ngoài thấy có vấn đề này mà mình tìm không ra

Có dãy số thập phân tăng dần tại vùng A1: D1, ví dụ:
{1.8; 5.2; 6.7; 9.3}

Tại ô A4 chứa giá trị điều kiện.
Công thức tại ô B4 tìm vị trí của giá trị A4 trong vùng:
=MATCH(A4,$A$1:$D$1,1)

Xét tại A4:
Gõ tay vào số 5.3 ===>Kết quả là 2
Gõ tay vào số 5.2 ===>Kết quả là 2

Tuy nhiên nếu A4 là kết quả của 1 phép tính. Ví dụ: =7.1-1.9
Kết quả là: 1

Mình thử các trường hợp sau:


Thay phép tính vào:
=MATCH(7.1-1.9,$A$1:$D$1,1) =>1

Thay đổi đưa 1 số chẵn vào:

=MATCH(7-1.8,$A$1:$D$1,1) =>2

Dùng ROUND

=MATCH(ROUND(7.1-1.9,1),$A$1:$D$1,1)=>2

Như vậy 3 trường hợp này cùng ra kết quả là 5.2, nhưng hàm MATCH lại phân biệt?


Nhờ các cao thủ chỉ giáo.
Anh có thể đọc bài này :
https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel
Phần mở đầu và phần Subtraction of Subtraction Results
 
Anh có thể đọc bài này :
https://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel
Phần mở đầu và phần Subtraction of Subtraction Results
Thanks eke_rula
Excel vẫn còn nhiều lỗ hổng để anh em ta nghiên cứu đào sâu.
Các trường hợp này không nắm vững thì cái tưởng như đúng mà lại không đúng
Giờ mới biết tại sao tên lửa Bắc Triều bị nổ liên tục, chắc dùng Excel để xử lý dữ liệu phóng và tính toán quỹ đạo. khà khà...
 
Excel vẫn còn nhiều lỗ hổng để anh em ta nghiên cứu đào sâu.
Không phải Excel có lỗ hổng mà là máy tính nó làm việc vậy đó
Vụ sai số do phép trừ số thập phân gây ra đã bàn nhiều trên diễn đàn rồi. Bởi vậy muốn ăn chắc thì phải luôn làm tròn trước khi tính toán (mặc dù mắt thường nhìn vào thì thấy rằng chẳng cần làm tròn)
 
Làm con toán so sánh số thực, luon luon cho nó một dung sai.
Điều này bất cứ ngừoi nào lập trình đều biết. Cái trang web nước ngoài nào đó mà bạn đề cập nói như thế là a ma tơ.

Với VLookup thong số 1 như thế thì đếm con số lớn nhất xem nó có bao nhiêu ký tự, ở đây là 2. Đem 12 trừ đi số ký tự, còn lại 10. Như vậy có thể cho dung sai 0,0000000001 (10^-10)

Đặt name DUNGSAI = 10^-10

=MATCH(7.1-1.9+DUNGSAI,$A$1:$D$1,1) =>1

Giờ mới biết tại sao tên lửa Bắc Triều bị nổ liên tục, chắc dùng Excel để xử lý dữ liệu phóng và tính toán quỹ đạo. khà khà...

Cái quan trọng của xử lý dữ liệu là quy trình và thuật toán. Excel hay phần mềm nào khác chỉ là phương tiện.

Có nhiều yếu tố để lập trình không đúng. Cách đây khoảng 20 năm, chính phi thuyền Mẽo bị nổ vì tính sai do chương trình chính (main) không biết rằng ngừoi lập trình chương trình con (function/sub) quên đổi đơn vị từ Imperial sang Metric.
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom