Ad esempio, voglio mostrare un elenco di pulsanti da 0,0,5, ... 5, che salta per ogni 0,5. Uso un ciclo for per farlo e ho un colore diverso sul pulsante 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';
}
}
In questo caso non dovrebbero esserci errori di arrotondamento poiché ogni valore è esatto in IEEE 754, ma sto lottando se dovessi cambiarlo per evitare il confronto di uguaglianza in virgola mobile:
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';
}
}
Da un lato, il codice originale è più semplice e avanti per me. Ma sto prendendo in considerazione una cosa: i == STANDARD_LINE induce in errore i compagni di squadra junior? Nasconde il fatto che i numeri in virgola mobile potrebbero avere errori di arrotondamento? Dopo aver letto i commenti di questo post:
sembra che ci siano molti sviluppatori che non sanno che alcuni numeri float sono esatti. Devo evitare i confronti dell'uguaglianza dei numeri float anche se è valido nel mio caso? O ci sto pensando troppo?
button
non cambia da nessuna parte nel tuo ciclo. Come si accede all'elenco dei pulsanti? Tramite l'indice in array o qualche altro meccanismo? Se si tratta dell'accesso all'indice in un array, questo è un altro argomento a favore del passaggio a numeri interi.
i
saranno sempre e solo numeri interi nella seconda lista. Prova a rimuovere il secondo/2.0
.