Junior #number#floating-point#ieee754
Vì sao 0.1 + 0.2 !== 0.3 trong JavaScript? Xử lý thế nào?
⚡ Trả lời nhanh
Number là số thực 64-bit IEEE 754 nhị phân, nên 0.1 và 0.2 không biểu diễn chính xác, tổng ra 0.30000000000000004. So sánh bằng sai số (epsilon), làm tròn khi hiển thị, hoặc tính tiền bằng số nguyên (đơn vị nhỏ nhất), BigInt hay thư viện decimal.
Ví dụ
main.js · sửa được
Giống như 1/3 không viết hữu hạn được trong hệ thập phân, 0.1 là số lặp vô hạn trong hệ nhị phân nên bị làm tròn.
Cách xử lý
- So sánh với epsilon thay vì
===. - Hiển thị:
toFixed(trả về string) hoặcIntl.NumberFormat. - Tiền tệ: lưu theo cent (số nguyên), hoặc dùng thư viện decimal.
- Số nguyên lớn hơn
Number.MAX_SAFE_INTEGER(2^53 - 1) mất chính xác, dùngBigInt.