Ngôn ngữ
English English Vietnamese (Tiếng Việt) Vietnamese (Tiếng Việt) Chinese (简体中文) Chinese (简体中文) Portuguese (Brazil) (Português do Brasil) Portuguese (Brazil) (Português do Brasil) Spanish (Español) Spanish (Español) Indonesian (Bahasa Indonesia) Indonesian (Bahasa Indonesia)
Giới thiệu công cụ Máy tính Thực hiện các phép tính nhanh với chế độ tiêu chuẩn và khoa học. Hỗ trợ nhập bàn phím, lịch sử tính toán và hoạt động trên mọi thiết bị. Mở
2026-05-22 11:25:00 5 phút đọc

Tại sao máy tính hiển thị 0.1 + 0.2 = 0.30000000000000004

Nhập 0.1 + 0.2 và kỳ vọng kết quả là 0.3 — nhưng máy tính lại hiển thị 0.30000000000000004. Đây là lý do nhị phân cụ thể khiến kết quả này làm hầu hết mọi người ngạc nhiên.

Nhập 0.1 + 0.2 vào máy tính ở trên và bạn sẽ thấy 0.30000000000000004 thay vì con số gọn gàng 0.3 như mong đợi. Máy tính không bị lỗi — nó đang hiển thị kết quả chính xác của một phép tính nhị phân cụ thể. Hiểu được vấn đề này chỉ mất chưa đến năm phút và sẽ thay đổi cách bạn đọc mọi kết quả thập phân từ bất kỳ máy tính kỹ thuật số nào.

Tại sao 0.1 không thể được lưu trữ chính xác trong hệ nhị phân

Mọi con số bên trong máy tính đều được lưu trữ dưới dạng nhị phân — cơ số 2, chỉ dùng các chữ số 0 và 1. Các phân số trông đơn giản trong hệ thập phân (cơ số 10) thường là phân số thập phân vô hạn tuần hoàn trong hệ nhị phân, giống hệt cách 1 ÷ 3 = 0.3333… lặp mãi mãi trong hệ thập phân.

Số thập phân 0.1 là một phân số như vậy. Trong hệ nhị phân, nó là 0.0001100110011001100110011… — một chuỗi lặp lại vô tận. Máy tính sử dụng chuẩn IEEE 754 độ chính xác kép (định dạng được dùng bởi JavaScript, và do đó bởi mọi máy tính chạy trên trình duyệt) lưu trữ các con số trong đúng 64 bit. 64 bit đó không thể chứa một chuỗi chữ số vô hạn, vì vậy giá trị được làm tròn đến số có thể biểu diễn gần nhất. Kết quả sau làm tròn không phải chính xác là 0.1; nó là:

0.1000000000000000055511151231257827021181583404541015625

Điều tương tự xảy ra với 0.2. Biểu diễn nhị phân của nó cũng là một phân số vô hạn tuần hoàn, và sau khi làm tròn nó trở thành:

0.200000000000000011102230246251565404236316680908203125

Điều gì xảy ra khi hai giá trị đã làm tròn đó được cộng lại

Khi máy tính cộng hai biểu diễn không chính xác đó lại với nhau, các sai số nhỏ không triệt tiêu nhau — chúng cộng dồn. Phép cộng tạo ra:

0.3000000000000000444089209850062616169452667236328125

Con số đó, được làm tròn đến số dấu phẩy động 64-bit gần nhất, trở thành 0.30000000000000004. Phần dư 4 ở vị trí thập phân thứ mười bảy không phải là lỗi làm tròn của máy tính — đó là kết quả đúng về mặt toán học khi cộng hai xấp xỉ nhị phân không chính xác theo chuẩn IEEE 754. Mọi thiết bị, ngôn ngữ lập trình và trình duyệt tuân theo cùng một chuẩn đều cho ra cùng một kết quả.

Sơ đồ minh họa cách 0.1 và 0.2 được lưu dưới dạng phân số nhị phân tuần hoàn và tổng của chúng tạo ra 0.30000000000000004

Tại sao máy tính này hiển thị 0.30000000000000004 thay vì một kết quả gọn hơn

Máy tính ở trên sử dụng new Function() của JavaScript để tính toán biểu thức của bạn, nghĩa là nó dựa trực tiếp vào phép tính số học dấu phẩy động 64-bit gốc của JavaScript engine. Không có lớp làm tròn ẩn nào để dọn dẹp kết quả đầu ra.

Về mặt nội bộ, mã nguồn có làm tròn kết quả đến 10 chữ số thập phân cho hầu hết các con số — Math.round(result * 1e10) / 1e10 — nhưng 0.30000000000000004 đã có chữ số bất ngờ đầu tiên ở vị trí thập phân thứ mười bảy, vượt xa ngưỡng làm tròn đó. Vì vậy kết quả dấu phẩy động thực sự được truyền qua mà không thay đổi.

Một số máy tính che giấu điều này bằng cách làm tròn mạnh đến 12 hoặc 13 chữ số có nghĩa trước khi hiển thị. Cách tiếp cận đó tạo ra kết quả trông thân thiện hơn là 0.3, nhưng nó che giấu độ chính xác mà các phép tính khoa học hoặc tài chính thực sự có thể cần đến. Sự đánh đổi là có thật: làm tròn hiển thị nhiều hơn đồng nghĩa với ít kết quả bất ngờ hơn nhưng cũng ít chữ số hiển thị hơn.

Điều này có ảnh hưởng đến mọi phép tính thập phân không?

Không — và đó là điểm mấu chốt cần lưu ý. Việc sai số có xuất hiện hay không phụ thuộc vào việc kết quả có thể được biểu diễn chính xác trong hệ nhị phân 64-bit hay không. Một số phép cộng tình cờ làm tròn hoàn hảo:

  • 0.1 + 0.4 = 0.5 — 0.5 có thể biểu diễn chính xác trong hệ nhị phân (0.1 trong cơ số 2), vì vậy các sai số triệt tiêu nhau và kết quả gọn gàng xuất hiện.
  • 0.25 + 0.25 = 0.5 — cùng lý do: cả hai giá trị đều là lũy thừa chính xác của 2.
  • 0.1 + 0.2 = 0.30000000000000004 — cả 0.1 lẫn 0.2 đều không thể biểu diễn chính xác, và sai số kết hợp của chúng đủ lớn để tồn tại sau khi làm tròn hiển thị.

Vấn đề không phải là "máy tính tính sai về số thập phân." Nói chính xác hơn: máy tính tính chính xác về phân số nhị phân, và hầu hết các số thập phân thông thường không phải là phân số nhị phân.

Phải làm gì khi độ chính xác là quan trọng

  • Đối với phép tính hàng ngày — sai số nằm ở vị trí thập phân thứ mười sáu hoặc mười bảy và hoàn toàn không đáng kể khi mua sắm, nấu ăn hay lập ngân sách.
  • Đối với các phép tính tài chính — hãy làm việc với số nguyên xu thay vì phân số đô la bất cứ khi nào có thể, hoặc sử dụng phần mềm kế toán chuyên dụng áp dụng phép tính số học dấu phẩy tĩnh.
  • Đối với kỹ thuật hoặc khoa học — lưu ý giới hạn độ chính xác (khoảng 15–17 chữ số có nghĩa đối với IEEE 754 độ chính xác kép) và xem xét liệu điều đó có quan trọng với dung sai đo lường của bạn không.
  • Để xác nhận một nghi ngờ — hãy trừ đi giá trị kỳ vọng: 0.1 + 0.2 - 0.3 trong máy tính ở trên trả về xấp xỉ 5.55e-17, kích thước thực tế của sai số.
Hãy thử: nhập 0.1 + 0.2 - 0.3 vào máy tính ở trên. Kết quả không phải là không — nó xấp xỉ 5.55e-17, khoảng cách chính xác giữa giá trị xấp xỉ được lưu trữ và giá trị thực. Con số nhỏ bé đó chính là thứ mà phần dư 4 trong 0.30000000000000004 biểu thị.
Không tìm thấy? Tự tạo công cụ với AI
Bắt đầu gõ để tìm kiếm...
Đang tìm kiếm...
Không tìm thấy kết quả
Hãy thử tìm với từ khóa khác