Наприклад, я хочу показати список кнопок від 0,0,5, ... 5, який переходить на кожні 0,5. Для цього я використовую цикл і мають інший колір на кнопці 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
.