Ví dụ: tôi muốn hiển thị danh sách các nút từ 0,0,5, ... 5, nhảy cho mỗi 0,5. Tôi sử dụng vòng lặp for để làm điều đó và có màu khác nhau tại nút STANDARD_LINE:
var MAX=5.0;
var DIFF=0.5
var STANDARD_LINE=1.5;
for(var i=0;i<=MAX;i=i+DIFF){
button.text=i+'';
if(i==STANDARD_LINE){
button.color='red';
}
}
Trong trường hợp này, không nên có lỗi làm tròn vì mỗi giá trị là chính xác trong IEEE 754. Nhưng tôi đang vật lộn nếu tôi nên thay đổi nó để tránh so sánh bằng dấu phẩy động:
var MAX=10;
var STANDARD_LINE=3;
for(var i=0;i<=MAX;i++){
button.text=i/2.0+'';
if(i==STANDARD_LINE/2.0){
button.color='red';
}
}
Một mặt, mã gốc đơn giản hơn và chuyển tiếp với tôi. Nhưng có một điều tôi đang xem xét: liệu tôi == STANDARD_LINE có đánh lừa đồng đội đàn em không? Liệu nó có che giấu thực tế là số dấu phẩy động có thể có lỗi làm tròn không? Sau khi đọc bình luận từ bài viết này:
có vẻ như có nhiều nhà phát triển không biết một số số float là chính xác. Tôi có nên tránh so sánh bình đẳng số float ngay cả khi nó hợp lệ trong trường hợp của tôi không? Hay tôi đang suy nghĩ quá nhiều về điều này?
button
không thay đổi bất cứ nơi nào trong vòng lặp của bạn. Làm thế nào là danh sách các nút truy cập? Thông qua chỉ số vào mảng hoặc một số cơ chế khác? Nếu đó là bằng cách truy cập chỉ mục vào một mảng, thì đây là một đối số khác có lợi cho việc chuyển sang số nguyên.
i
sẽ chỉ là toàn bộ số trong danh sách thứ hai. Hãy thử loại bỏ cái thứ hai/2.0
.