Misalnya, saya ingin menampilkan daftar tombol mulai 0,0,5, ... 5, yang melompat untuk setiap 0,5. Saya menggunakan loop for untuk melakukan itu, dan memiliki warna berbeda di tombol 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';
}
}
Pada kasus ini seharusnya tidak ada kesalahan pembulatan karena setiap nilai tepat di IEEE 754.Tapi saya berjuang jika saya harus mengubahnya untuk menghindari perbandingan kesetaraan floating point:
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';
}
}
Di satu sisi, kode asli lebih sederhana dan maju ke saya. Tetapi ada satu hal yang saya pertimbangkan: apakah saya == STANDARD_LINE menyesatkan rekan satu tim junior? Apakah itu menyembunyikan fakta bahwa angka floating point mungkin memiliki kesalahan pembulatan? Setelah membaca komentar dari posting ini:
sepertinya ada banyak pengembang yang tidak tahu beberapa angka float tepat. Haruskah saya menghindari perbandingan kesetaraan angka float meskipun valid dalam kasus saya? Atau apakah saya terlalu memikirkan hal ini?
button
tidak berubah di mana pun di lingkaran Anda. Bagaimana daftar tombol diakses? Melalui indeks ke array atau mekanisme lain? Jika itu dengan indeks akses ke array, ini adalah argumen lain yang mendukung beralih ke bilangan bulat.
i
hanya akan menjadi angka utuh dalam daftar kedua. Coba hapus yang kedua/2.0
.