Na przykład chcę wyświetlić listę przycisków od 0,0,5, ... 5, która przeskakuje za każde 0,5. Używam do tego pętli for i mam inny kolor pod przyciskiem 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';
}
}
W tym przypadku nie powinno być żadnych błędów zaokrąglania, ponieważ każda wartość jest dokładna w IEEE 754, ale walczę, czy powinienem ją zmienić, aby uniknąć porównania równości zmiennoprzecinkowej:
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';
}
}
Z jednej strony oryginalny kod jest prostszy i przesłany do mnie. Ale zastanawiam się nad jedną rzeczą: czy ja == STANDARD_LINE wprowadza w błąd młodszych kolegów z drużyny? Czy ukrywa to, że liczby zmiennoprzecinkowe mogą zawierać błędy zaokrąglania? Po przeczytaniu komentarzy do tego postu:
wydaje się, że wielu programistów nie wie, że niektóre liczby zmiennoprzecinkowe są dokładne. Czy powinienem unikać porównywania liczb zmiennoprzecinkowych, nawet jeśli jest to ważne w moim przypadku? A może zastanawiam się nad tym?
button
nic się nie zmienia w twojej pętli. Jak można wyświetlić listę przycisków? Poprzez indeks do tablicy lub inny mechanizm? Jeśli jest to przez dostęp indeksu do tablicy, jest to kolejny argument przemawiający za przejściem na liczby całkowite.
i
zawsze będą to liczby całkowite na drugiej liście. Spróbuj usunąć drugi/2.0
.