thể trùng lặp:
Why can't decimal numbers be represented exactly in binary?
problem with floating valuesPHP lỗi dấu chấm động với cơ bản Toán
$var1 = 1;
for ($i=0; $i<30; $i++) {
$var1 += 0.1;
$var2 = floor($var1);
$var3 = $var1-$var2;
if ($var3 == 0.5) {
$var1 = $var2+1;
}
}
Mục đích của vòng này là để đếm 1.0, 1.1, 1.2, 1.3, 1.4, và sau đó chuyển đến 2.0, 2.1, 2.2, v.v.
Vấn đề tôi nhận được là tuyên bố if
không bao giờ đúng. Ngoài ra, mọi tính toán thứ mười đều giải quyết một số câu trả lời khoa học điên rồ.
Làm cách nào để khắc phục sự cố này? Hãy giúp tôi!
Chỉnh sửa: Tôi đã viết câu hỏi trong một chút vội vã thất vọng và nó đã nhiều hơn một, tôi thấy điều đó ngay bây giờ.
Phần đầu tiên của câu hỏi thực sự là "làm cách nào tôi có thể thực hiện công việc này bằng cách gửi thư ký điểm nổi" và "tại sao thư ký này lại xảy ra!"
Cảm ơn tất cả các câu trả lời tuyệt vời và tôi đang bỏ phiếu cho câu trả lời là chính xác, dễ dàng trả lời câu hỏi cốt lõi về "cách thực hiện công việc này".
Sử dụng 0,49 thay vì 0,5 và> thay vì ==. Thô lỗ và không phải là mã tốt nhất trên thế giới nhưng nó giải quyết câu hỏi ban đầu. Cảm ơn mọi người vì những phản hồi khác mà tôi sẽ đọc và theo dõi để cải thiện quá trình viết mã của tôi.
Một lần nữa, cảm ơn rất nhiều.
Có thể đăng "câu trả lời khoa học điên rồ" là gì ??? – mathematician1975
có thể trùng lặp của [vấn đề với các giá trị nổi] (http://stackoverflow.com/questions/6503994/problem-with-floating-values), [Hiểu các số dấu phẩy động trong php] (http://stackoverflow.com/questions/10991713/compreh-floating-point-number-in-php), v.v. – fresskoma
Giải thích tuyệt vời về các vấn đề về dấu phẩy động: http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – mtrw