ปัญหาการใช้งาน toFixed() ใน Javascript เขียนเมื่อ 2009.06.30 โดย

ในการคำนวนและการแสดงผลตัวแลขใน 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 ยกกำลังทศนิยมที่ต้องการหา วิธีการอาจจะดูยุ่งยาก แต่การคำนวนเพื่อให้ถูกต้องควรคำนวนตัวเลขแบบตัวเลข ไม่ควรหาค่าแบบตัวอักษรซึ่งจะทำให้การทำงานผิดพลาดได้




คำเตือนคำเตือน เนื้อหาต่างๆ ในบทความ รวมถึงรูปภาพทั้งหมดในบทความนี้ เป็นความเห็นส่วนตัวของผู้เขียนแต่ละคน ซึ่งแต่ละคนได้ทำการลงทะเบียน และเขียนบทความลงใน Modoeye Articles นี้โดยไม่มีค่าธรรมเนียมใดๆ บทความเหล่านี้เป้าหมายเพื่อการศึกษา และความบันเทิงเท่านั้น การนำส่วนหนึ่งส่วนใดของบทความไปใช้งาน ควรทำการอ้างอิงถึงผู้เขียนและแหล่งที่มาด้วย