Kết quả sai trong excel? (4 người xem)

Liên hệ QC

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

meoluoihvtc

Thành viên mới
Tham gia
11/9/08
Bài viết
17
Được thích
4
Chào cả nhà.
Em có 1 file như sau:
1. 300.347,23 2. 299.997,87
3. 349,36
Công thức 4= 1-2-3 ra kết quả là: (0,0000000000139834810398); đáng lý ra kết quả phải bằng 0.
Mọi người giải thích lý do giúp em với ạ?
Em cám ơn.
 

File đính kèm

Chào cả nhà.
Em có 1 file như sau:
1. 300.347,23 2. 299.997,87
3. 349,36
Công thức 4= 1-2-3 ra kết quả là: (0,0000000000139834810398); đáng lý ra kết quả phải bằng 0.
Mọi người giải thích lý do giúp em với ạ?
Em cám ơn.
Bạn định dạng cho C4 là Number --> kết quả là 0
 
Cám ơn anh, nhưng mà đúng ra kết quả phải là 0 chẵn chứ không có số thập phân sau dấu phẩy như vậy chứ?
 
Cám ơn anh, nhưng mà đúng ra kết quả phải là 0 chẵn chứ không có số thập phân sau dấu phẩy như vậy chứ?
Do định dạng của bạn thôi (sao mà có định dạng số dài LÊ THÊ những số 0 vậy)
Bạn cộng ngược lại trong 1 cell khác =C2+C3 sẽ ra C1
Không biết bạn ứng dụng định dạng số tại C4 vào việc gì mà có nhiều số sau dấu phảy vậy???
 
Cách giải quyết vấn đề sai số bằng Format Cells là cực kỳ tai hại, cái này người ta gọi là tự mình lừa chính mình đấy.
Thì mình đã hỏi bạn đó như bài #5 đó.
Đâu có nghành nào cần độ chính xác khủng khiếp như vậy (vài chục số sau dấu phảy).
 
Thì mình đã hỏi bạn đó như bài #5 đó.
Đâu có nghành nào cần độ chính xác khủng khiếp như vậy (vài chục số sau dấu phảy).
Biết đâu trong một tình huống nào đó, cái "số không" này được đem nhân với một số a cực lớn, như vậy lại thêm một câu hỏi mới nữa: Tại sao 0*a <> 0?!
 
ngoài việc excel mặc định kiểu double nên có chuyện biểu diễn số thập phân có thêm cái đuôi con con (nhưng rắc rối) như trên,
cần lưu ý thêm một số thuộc tính dùng nhiều hơn 2 giá trị chứ không phải là 2 giá trị 0/1 như nhiều người nghĩ.

chẳng hạn nếu viết if .underline = true then thì chẳng bao giờ đạt giá trị cả, vì giá trị của true = -1, còn các giá trị của .underline là
xlUnderlineStyleSingle = 2, xlUnderlineStyleDouble = -4119, xlUnderlineStyleNone = -4142, xlUnderlineStyleSingleAccounting = 4, xlUnderlineStyleDoubleAccounting = 5

ngay cả visible, nhiều người nhầm là có hai giá trị true/false, thực ra:
xlSheetHidden = 0, xlSheetVeryHidden = 2, xlSheetVisible = -1
nói chung là phải rất thận trọng với phép toán so sánh.
 
Biết đâu trong một tình huống nào đó, cái "số không" này được đem nhân với một số a cực lớn, như vậy lại thêm một câu hỏi mới nữa: Tại sao 0*a <> 0?!
Tôi cũng đã mấy lần bị rắc rối do vụ này rồi. Chẳng hạn là viết Code để lọc ra những dòng có giá trị bằng 0, đến lúc chạy vẫn thấy sót ra mấy dòng. Điều đầu tiên nghĩ đến là code sai, bỏ ra cả ngày trời kiểm tra, viết lại vẫn vậy. Kiểm tra dữ liệu thì không phát hiện ra do Format.
Trường hợp của chủ Top thì:
4= 1-2-3 ra kết quả là: (0,0000000000139834810398)
4 = 1-3-2 kết quả sẽ là 0. Bó tay với bác Bill }}}}}
 

Chả có lỗi bác biêu bác bọt gì cả. Bạn dùng hệ thống khác (Ubuntu chẳng hạn) thì cũng bị gặp vấn đề đại khái như vậy thôi.

Đó là vấn đề chung của dữ liệu dạng số thực trên máy tính. Chỉ có những máy tính đặc chế cho ngành khoa học mới không bị.

Người làm toán chuyên nghiệp đều biết cái gọi là "có thể coi như 0".
Theo cách này, người ta tự đặt cho mình một con số rất nhỏ, ép si lon (thường là 10^-10), gọi là sai số chấp nhận. Cứ trị nào nhỏ hơn số này thì coi như zê rô. Và muốn so sánh 2 số với nhau, người ta dùng IF(ABS(a-b)<=epsilon, "bằng nhau", "không bằng nhau")
 
Người làm toán chuyên nghiệp đều biết cái gọi là "có thể coi như 0".
Theo cách này, người ta tự đặt cho mình một con số rất nhỏ, ép si lon (thường là 10^-10), gọi là sai số chấp nhận. Cứ trị nào nhỏ hơn số này thì coi như zê rô. Và muốn so sánh 2 số với nhau, người ta dùng IF(ABS(a-b)<=epsilon, "bằng nhau", "không bằng nhau")
Cảm ơn bạn vì đã cho một ít kinh nghiệm.
 
Web KT

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

Back
Top Bottom