Por ejemplo, quiero mostrar una lista de botones de 0,0.5, ... 5, que salta por cada 0.5. Utilizo un bucle for para hacer eso, y tengo un color diferente en el botón 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';
}
}
En este caso, no debería haber errores de redondeo ya que cada valor es exacto en IEEE 754. Pero estoy luchando si debería cambiarlo para evitar la comparación de igualdad de punto flotante:
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';
}
}
Por un lado, el código original es más simple y reenviado a mí. Pero hay una cosa que estoy considerando: ¿i == STANDARD_LINE engaña a los compañeros de equipo junior? ¿Oculta el hecho de que los números de coma flotante pueden tener errores de redondeo? Después de leer los comentarios de esta publicación:
Parece que hay muchos desarrolladores que no saben que algunos números flotantes son exactos. ¿Debo evitar las comparaciones de igualdad de números flotantes incluso si es válido en mi caso? ¿O estoy pensando demasiado en esto?
button
no cambia en ninguna parte de tu circuito. ¿Cómo se accede a la lista de botones? ¿Por índice en matriz o algún otro mecanismo? Si es por acceso de índice a una matriz, este es otro argumento a favor de cambiar a enteros.
i
solo serán números enteros en la segunda lista. Intenta eliminar el segundo/2.0
.