toFixed() Floating point error
toFixed() Floating point error
ในการคำนวนและการแสดงผลตัวแลขใน Javascript นั้นจะมีปัญหาการคำนวนที่ผิดพลาดใน browser ต่างๆและยังไม่ได้รับการแก้ไขจนถึงปัจจุบัน (Dec 2007) เช่น
เมื่อเราต้องการแสดงผลทศนิยม 2 ตำแน่งด้วย Javascript เราจะใช้ toFixed() เพื่อทำการหาค่า การใช้งานเช่น
- a = 24.234; // a เป็น 24.234
- b = a.toFixed(2); // 24.23
แต่ปัญหาจะเกิดเมื่อ มีการคำนวนตัวเลขบางตัวเช่น
- a = 162.295; // a เป็น 162.295
- b = a.toFixed(2); // 162.29
จะเห็นว่าจะเกิดความผิดพลาดในการแสดงผล ซึ่งค่าที่ถูกต้อควรจะเป็น 162.30 เนื่องจากการหาค่าทศนิยมใน Javascript จะใช้
- a = 162.295; // a เป็น 162.295
- b = a.toFixed(2);
- // a * 100 = 16229.49999999
- // a / 100 = 162.29
ทางแก้ของปัญหานี้ก็คือเขียน Function มาใช้เองครับ เช่น
- function toFixed(num, pre){
- num *= Math.pow(10, pre);
- num = (Math.round(num, pre) + (((num - Math.round(num, pre))>=0.5)?1:0)) / Math.pow(10, pre);
- return num.toFixed(pre);
- }
- a = 162.295; // a = 162.295
- toFixed(a, 2); // 162.30
หลักการทำงานก็คือ เอาเลขทศนิยมคูณด้วย 10 ยกกำลังทศนิยมที่ต้องการหา เช่น ทศนิยม 2 หลักก็คูณด้วย 100 จากนั้นก็ดูว่าเลขหลังทศนิยมนั้นมีค่าเป็นเท่าใดควรปัดเศษหรือไม่เอาไปรวมกับเลขเดิม จากนั้นเอามาหารด้วย 10 ยกกำลังทศนิยมที่ต้องการหา วิธีการอาจจะดูยุ่งยาก แต่การคำนวนเพื่อให้ถูกต้องควรคำนวนตัวเลขแบบตัวเลข ไม่ควรหาค่าแบบตัวอักษรซึ่งจะทำให้การทำงานผิดพลาดได้














