Например, я хочу показать список кнопок с 0,0,5, ... 5, которые переходят на каждые 0,5. Для этого я использую цикл for, и у кнопки 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';
}
}
В этом случае не должно быть ошибок округления, поскольку каждое значение является точным в IEEE 754. Но я изо всех сил, если я должен изменить его, чтобы избежать сравнения равенства с плавающей запятой:
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';
}
}
С одной стороны, оригинальный код более прост и понятен мне. Но есть одна вещь, которую я рассматриваю: я == STANDARD_LINE вводит в заблуждение младших товарищей по команде? Это скрывает тот факт, что числа с плавающей запятой могут иметь ошибки округления? Прочитав комментарии к этому посту:
кажется, что многие разработчики не знают, что некоторые числа с плавающей точкой точны. Следует ли мне избегать сравнений равенства чисел с плавающей запятой, даже если это допустимо в моем случае? Или я слишком обдумываю это?
button
нигде в вашей петле ничего не меняется. Как получить доступ к списку кнопок? Через индекс в массив или какой-то другой механизм? Если это по индексу доступа к массиву, это еще один аргумент в пользу переключения на целые числа.
i
во втором списке будут только целые числа. Попробуйте удалить второй/2.0
.