Por exemplo, quero mostrar uma lista de botões de 0,0,5, ... 5, que salta para cada 0,5. Eu uso um loop for para fazer isso e tenho cores diferentes no botão 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';
}
}
Nesse caso, não deve haver erros de arredondamento, pois cada valor é exato no IEEE 754. Mas estou lutando para alterá-lo para evitar a comparação de igualdade de ponto flutuante:
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 um lado, o código original é mais simples e encaminhado para mim. Mas há uma coisa que estou considerando: eu == STANDARD_LINE engana colegas juniores? Esconde o fato de que números de ponto flutuante podem ter erros de arredondamento? Depois de ler os comentários deste post:
parece que muitos desenvolvedores não sabem que alguns números flutuantes são exatos. Devo evitar comparações de igualdade de número flutuante, mesmo que seja válido no meu caso? Ou estou pensando demais sobre isso?
button
não muda em nenhum lugar do seu loop. Como é acessada a lista de botões? Via índice em array ou algum outro mecanismo? Se for pelo acesso do índice a uma matriz, esse é outro argumento a favor da mudança para números inteiros.
i
sempre serão números inteiros na segunda listagem. Tente remover o segundo/2.0
.