8
การเปรียบเทียบความเท่าเทียมกันของจำนวนลอยเข้าใจผิดนักพัฒนารุ่นน้องแม้ว่าจะไม่มีข้อผิดพลาดในการปัดเศษในกรณีของฉันหรือไม่?
ตัวอย่างเช่นฉันต้องการแสดงรายการปุ่มจาก 0,0.5, ... 5 ซึ่งข้ามไปแต่ละ 0.5 ฉันใช้สำหรับการวนรอบเพื่อทำเช่นนั้นและมีสีที่แตกต่างกันที่ปุ่ม 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'; } } ในกรณีนี้ไม่ควรมีข้อผิดพลาดในการปัดเศษเนื่องจากค่าแต่ละค่าเป็นค่าที่แน่นอนใน IEEE 754 แต่ฉันกำลังลำบากถ้าฉันควรเปลี่ยนเพื่อหลีกเลี่ยงการเปรียบเทียบความเท่าเทียมกันของทศนิยม 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'; } } ในมือข้างหนึ่งรหัสดั้งเดิมนั้นเรียบง่ายกว่าและส่งต่อมาให้ฉัน แต่มีสิ่งหนึ่งที่ฉันกำลังพิจารณา: i == STANDARD_LINE ทำให้เข้าใจผิดว่าเป็นเพื่อนร่วมทีมของจูเนียร์หรือไม่? มันซ่อนข้อเท็จจริงที่ว่าตัวเลขจุดลอยตัวอาจมีข้อผิดพลาดในการปัดเศษหรือไม่ หลังจากอ่านความคิดเห็นจากโพสต์นี้: https://stackoverflow.com/questions/33646148/is-hardcode-float-precise-if-it-can-be-represented-by-binary-format-in-ieee-754 ดูเหมือนว่ามีนักพัฒนาหลายคนไม่ทราบว่าตัวเลขลอยตัวบางอย่างแน่นอน ฉันควรหลีกเลี่ยงการเปรียบเทียบความเท่าเทียมกันของจำนวนทศนิยมแม้ว่าจะถูกต้องในกรณีของฉัน หรือฉันกำลังคิดถึงเรื่องนี้อยู่