Excel có vấn đề???

  • Thread starter aThuan
  • Ngày gửi
aThuan

aThuan

Cao cấp
27/9/06
347
5
18
Tp.HCM
Một bài toán hết sức đơn giản:
=11,7-7,2-4,35 (ví dụ nó nằm ở ô A1)
kết quả là bao nhiêu nhỉ, ắt hẳn là bằng 0,15 (không phải bàn)

ô A2 có công thức "=A1&" nn""
thì nó lại là: "0,149999999999999 nn"

Sao lại như thế nhỉ, Bác nào nắm được vấn đề giải thích giúp với????
Xin cảm ơn!

Các bác xem file đính kèm chắc rõ hơn
View attachment hoi.zip
 
Sửa lần cuối:
Khóa học Quản trị dòng tiền
H

hvtgroup

Ông lái đò...
15/3/04
375
0
16
HaiPhong
Tôi nghĩ rằng đây là do vấn đề xử lý số lẻ thập phân của Excel?!
 
N

Nguyen Ha Lien

Guest
11/10/06
21
0
0
Dinh Cong
Mình đã xem file kèm theo của bạn rồi và mình đã làm thử rồi , bạn khắc phục tình trạng đó bằng cách ở ô A2 bạn = "Round(A1;2)&" "nn" nó sẽ ra kết quả 0,15 nn.
 
aThuan

aThuan

Cao cấp
27/9/06
347
5
18
Tp.HCM
Nguyen Ha Lien nói:
Mình đã xem file kèm theo của bạn rồi và mình đã làm thử rồi , bạn khắc phục tình trạng đó bằng cách ở ô A2 bạn = "Round(A1;2)&" "nn" nó sẽ ra kết quả 0,15 nn.

Ở đây không phải là cách khắc chế, mà là tại sao lại như vậy??????
Hay Excel có vấn đề?
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
49
Hà Nội
www.bluesofts.net
aThuan nói:
Một bài toán hết sức đơn giản:
=11,7-7,2-4,35 (ví dụ nó nằm ở ô A1)
kết quả là bao nhiêu nhỉ, ắt hẳn là bằng 0,15 (không phải bàn)

ô A2 có công thức "=A1&" nn""
thì nó lại là: "0,149999999999999 nn"

Sao lại như thế nhỉ, Bác nào nắm được vấn đề giải thích giúp với????
Xin cảm ơn!

Các bác xem file đính kèm chắc rõ hơn
View attachment 2633

Tất cả các ngôn ngữ : C/C++/Delphi/VB/Foxpro/Pascal... đều như thế. Đây là lỗi xử lý số thập phân của chíp máy tính với loại giá trị kiểu Double.
Trong VB/VBA nếu bạn không khai báo biến x, trong chương trình bạn gán x=1.5 thì VB tự nhận dạng x có kiểu Variant, khi x=1.15 thì nó được xác định là kiểu Double.

Trong Excel giá trị ở các ô (Cell) có kiểu XLOPER. Khi ta gõ số chẵn thì nó hiểu là kiểu Integer, số lẻ tự hiểu là Double.

Lỗi về giá trị kiểu Double thuộc về phần cứng của máy tính, các PM vô can.

Cách khắc phục
+ Trong VB/VBA: tất cả các khai báo kiểu Double đổi thành Currency.
+ Trên Sheet dùng hàm ROUND() để bao.
 
Sửa lần cuối:
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Đúng rồi đấy! Khi xây dựng sheet cũng vậy, rõ ràng mình đã lập công thức cân bằng hết mà kết quả vẫn có số dư ở 1 giá trị rất nhỏ, 0.0000013245 chẳng hạn. Mình không hiểu tường tận nhưng cũng đoán là lỗi xử lý dự liệu của phần mềm mà thôi.
 
S

son_ktt

Guest
25/11/06
341
0
0
Ha Noi
Cái bác tuanktcdcn này đúng là bậc thầy về excel. Cám ơn bác đã cho biết thêm kiến thức rất bổ ích!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,030
125
63
52
Hà nội
vnuni.net
Vấn đề này đã từng đăng trên báo tạp chí gì đó (thậm chí có cả test code của tác giả bài báo đó). Giải pháp excel hay box Excel ở WKT đã từng bàn đến chuyện này lâu rồi mà.
 
aThuan

aThuan

Cao cấp
27/9/06
347
5
18
Tp.HCM
hai2hai nói:
Vấn đề này đã từng đăng trên báo tạp chí gì đó (thậm chí có cả test code của tác giả bài báo đó). Giải pháp excel hay box Excel ở WKT đã từng bàn đến chuyện này lâu rồi mà.
Bác cho xin cái đường dẫn để em được "chiêm ngưỡng" tý ạ! em tìm hoài mà không thấy nó ở đâu.:wall:
Tuanktcdcn nói:
Tất cả các ngôn ngữ : C/C++/Delphi/VB/Foxpro/Pascal... đều như thế. Đây là lỗi xử lý số thập phân của chíp máy tính với loại giá trị kiểu Double.
Trong VB/VBA nếu bạn không khai báo biến x, trong chương trình bạn gán x=1.5 thì VB tự nhận dạng x có kiểu Variant, khi x=1.15 thì nó được xác định là kiểu Double.

Trong Excel giá trị ở các ô (Cell) có kiểu XLOPER. Khi ta gõ số chẵn thì nó hiểu là kiểu Integer, số lẻ tự hiểu là Double.

Lỗi về giá trị kiểu Double thuộc về phần cứng của máy tính, các PM vô can.
Bác giải thích thế mình thấy vẫn ........chưa tâm phục khẩu phục:

- Trên cùng 1 máy (không có bất cứ thay đổi nào về phần cứng) thử trên Excell 2000: thì không sao (kết quả đúng) còn excell 2003 thì ...có sao.=> không thể kết luận là do lỗi xử lý của phần cứng được.

- Như bác giải thích 1.15 là kiểu double=> xử lý bị lỗi. Vậy thay bằng (=11,7-7,2-4,116) có phải là double không??? Trong phép tính này lại tính đúng:wall:
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
Dear all,
-------
Em đã có dịp tìm hiểu và trao đổi cụ thể với anh aThuan và cũng có những thắc mắc giống anh.
Nguyên nhân thì chưa xác định được nhưng em có kết luận: trong mọi phép toán có sự sai lệch như đã nêu thì sai số là rất nhỏ: 9,99200722162641E-16 hay 0,000000000000001. Hay nói cách khác, cứ 1.000.799.917.193.440 đơn vị thì sai số là 1 đơn vị. (File đính kèm).

Err_InterCell1.jpg

Câu hỏi đặt ra là:
-Có nên coi đây là một lỗi của MS Excel không?
- Người dùng MS Excel cần lưu ý đến vấn đề này trong những trường hợp nào?
- Mức độ ảnh hưởng của sai số đến kết quả tính toán?
Như hình minh hoạ, công thức sau đây có thể ảnh hưởng đến các tính toán tiếp theo của bạn:
= IF(B4-B5= 0,15; 1; 0)
- Khắc phục vấn đề này như thế nào? (không dùng VBA để giải quyết)
 

Đính kèm

  • ErrNum.zip
    9.5 KB · Lượt xem: 102
Sửa lần cuối:
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,030
125
63
52
Hà nội
vnuni.net

Xem nhiều