toFixed() Floating point error

toFixed() Floating point error

ในการคำนวนและการแสดงผลตัวแลขใน Javascript นั้นจะมีปัญหาการคำนวนที่ผิดพลาดใน browser ต่างๆและยังไม่ได้รับการแก้ไขจนถึงปัจจุบัน (Dec 2007) เช่น

เมื่อเราต้องการแสดงผลทศนิยม 2 ตำแน่งด้วย Javascript เราจะใช้ toFixed() เพื่อทำการหาค่า การใช้งานเช่น

JAVASCRIPT
  1. a = 24.234; // a เป็น 24.234
  2. b = a.toFixed(2); // 24.23

แต่ปัญหาจะเกิดเมื่อ มีการคำนวนตัวเลขบางตัวเช่น

JAVASCRIPT
  1. a = 162.295; // a เป็น 162.295
  2. b = a.toFixed(2); // 162.29

จะเห็นว่าจะเกิดความผิดพลาดในการแสดงผล ซึ่งค่าที่ถูกต้อควรจะเป็น 162.30 เนื่องจากการหาค่าทศนิยมใน Javascript จะใช้

JAVASCRIPT
  1. a = 162.295; // a เป็น 162.295
  2. b = a.toFixed(2);
  3. // a * 100 = 16229.49999999
  4. // a / 100 = 162.29

ทางแก้ของปัญหานี้ก็คือเขียน Function มาใช้เองครับ เช่น

JAVASCRIPT
  1. function toFixed(num, pre){
  2.         num *= Math.pow(10, pre);
  3.         num = (Math.round(num, pre) + (((num - Math.round(num, pre))>=0.5)?1:0)) / Math.pow(10, pre);
  4.         return num.toFixed(pre);
  5. }
  6. a = 162.295; // a = 162.295
  7. toFixed(a, 2); // 162.30

หลักการทำงานก็คือ เอาเลขทศนิยมคูณด้วย 10 ยกกำลังทศนิยมที่ต้องการหา เช่น ทศนิยม 2 หลักก็คูณด้วย 100 จากนั้นก็ดูว่าเลขหลังทศนิยมนั้นมีค่าเป็นเท่าใดควรปัดเศษหรือไม่เอาไปรวมกับเลขเดิม จากนั้นเอามาหารด้วย 10 ยกกำลังทศนิยมที่ต้องการหา วิธีการอาจจะดูยุ่งยาก แต่การคำนวนเพื่อให้ถูกต้องควรคำนวนตัวเลขแบบตัวเลข ไม่ควรหาค่าแบบตัวอักษรซึ่งจะทำให้การทำงานผิดพลาดได้

Created on 2007.12.19
Last updated on 2008.02.03

Our sponsors

Earn $$ with WidgetBucks!
Home | Services | Forum | Classified | Directories | Support | Contact
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login