Zum Beispiel möchte ich eine Liste von Schaltflächen von 0,0.5, ... 5 anzeigen, die für jede 0,5 springt. Ich benutze eine for-Schleife, um das zu tun, und habe eine andere Farbe auf der Schaltfläche 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 diesem Fall sollte es keine Rundungsfehler geben, da jeder Wert in IEEE 754 genau ist. Ich habe jedoch Probleme, ihn zu ändern, um einen Gleitkomma-Gleichheitsvergleich zu vermeiden:
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';
}
}
Einerseits ist der ursprüngliche Code einfacher und geht an mich weiter. Aber eines überlege ich mir: Führt i == STANDARD_LINE Junior-Teamkollegen in die Irre? Verbirgt sich die Tatsache, dass Gleitkommazahlen Rundungsfehler aufweisen können? Nach dem Lesen von Kommentaren aus diesem Beitrag:
Es scheint, dass es viele Entwickler gibt, die nicht wissen, dass einige Gleitkommazahlen genau sind. Sollte ich Gleichheitsvergleiche mit Gleitkommazahlen vermeiden, auch wenn sie in meinem Fall gültig sind? Oder bin ich überlegt?
button
sich an keiner Stelle in Ihrer Schleife etwas ändert. Wie wird auf die Liste der Schaltflächen zugegriffen? Über einen Index in ein Array oder einen anderen Mechanismus? Wenn es sich um einen Indexzugriff auf ein Array handelt, ist dies ein weiteres Argument für die Umstellung auf Ganzzahlen.
i
wird aber immer nur eine ganze Zahl in der zweiten Auflistung sein. Versuchen Sie, die zweite zu entfernen/2.0
.