Đó được gọi là độ chính xác gần đúng . Đây không phải là lỗi, dấu phẩy động
kiểu dữ liệu được thiết kế để hoạt động theo cách đó. Họ không thể lưu trữ dữ liệu một cách chính xác. Vì vậy, nếu điều đó quan trọng, bạn nên sử dụng các kiểu dữ liệu điểm cố định, chẳng hạn như DECIMAL
trong MySQL.
Mặt khác, bạn luôn có thể sử dụng delta chính xác để so sánh cho dấu phẩy động, như:
SELECT
`foo`,
`bar`,
IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
t
như bạn có thể thấy, delta ở đây là 1E-13
(thông thường, như vậy là đủ)