Hỏi cách sửa lỗi số thập phân của Javascript

Chào các bạn.
Mình gặp 1 lỗi khi sử dụng Javascript để tính toán cho ra phần thập phân không chính xác.
Trường hợp 1:
Kết quả đúng: 77.8055 + 0.3 = 78.1055
Javascript: 77.8055 + 0.3 =78.10549999999999

Trường hợp 2:
Kết quả đúng: 77.8055*220070 = 17122656,385
Javascript: 77.8055*220070 = 17122656.384999998
jsfiddle demo

Trường hợp 2 mình xử lý bằng cách : (77.8055*10*220070*10)/100 thì thấy OK nhưng không biết nếu gặp số khác thì có Ok không nữa.
Còn trường hợp mình bó tay.

Nhờ các bạn có kinh nghiệm chia sẽ kinh nghiệm xử lý trường hợp này với.
Xin cám ơn!

Máy tính không biểu diễn chính xác số có phần thập phân được. Cái này là giới hạn chung rồi.

1 Like

Bạn thường xử lý trường hợp này như thế nào vậy?

Cần lấy mấy số lẻ?

Bạn chỉ cần a = 78.8055 + 03
a = a.toFixed(4)

Là nó sẽ ra, chênh nhau chút xíu lẻ chắc không quan trọng lắm vì có lẽ bạn không đang tính toán trong một lĩnh vực khoa học cần độ chính xác rất cao.

2 Likes

Mình cám ơn.
Nhưng làm vậy không được bạn ạ.
Vì không phải lúc nào mình toFixed(4) thì kết quả nó cũng đúng.
Vd:
Kết quả đúng: a= 78.80535
Kết quả sai: b = 78.80534999999999
Nếu mình lấy b = b.toFixed(4) thì => b = 78.8053 (Sai)

Máy tính không biểu diễn chính xác số thập phân, kể cả nhân lên rồi chia vẫn gây sai sót. Để tránh sai sót, cần dẹp ngay việc sử dụng built-in real number của ngôn ngữ. Đối với JS thì dùng lib này:

4 Likes

Nếu thay vì fixed(4) thì bạn fix từ 13 xuống 12 rồi 11 rồi 10… sẽ đúng :joy:

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