วันนี้มีการพูดคุยเรื่องปัญหาการจัดการข้อมูล
ชนิด Floating-point ในภาษา JavaScript
ปัญหาคือ
การเปรียบเทียบค่า หลังจากทำการประมวลผลแล้ว ไม่ถูกต้องตามที่คาดหวัง
ยกตัวอย่างเช่น
0.1 + 0.2 น่าจะต้องเท่ากับ 0.3
แต่ที่เจอใน JavaScript กลับไม่ใช่ !!
แสดงตัวอย่างของปัญหาดังนี้
จะแก้ไขปัญหานี้อย่างไรดี ?
ลองไปอ่านเอกสารตัวนี้ดูกันก่อนไหม ? ยาวมาก ๆ
- What Every Computer Scientist Should Know About Floating-Point Arithmetic
- What Every JavaScript Developer Should Know About Floating Points
การแก้ไขปัญหาขั้นพื้นฐานใน JavaScript
จะมี function ของตัวแปรชนิดตัวเลขที่ใช้งาน 2 function คือ
- toFixed()
- toPrecision()
แต่ต้องระมัดระวังในการใช้งานด้วย
ทั้งค่าที่ใส่ใน parameter
กับผลที่ออกมาจะมีชนิดเป็น string จำเป็นต้องแปลงกลับมาด้วย
แต่ถ้าใช้งานจริง ๆ จัง ๆ แนะนำให้ไปใช้ libary จัดการดีกว่า
เหมือนการจัดการ datetime นิยมใช้งาน moment.js
ยกตัวอย่าง library การจัดการตัวเลยทั้ง Money และ Currency
หรืออีกหนึ่งแนวทาง คือการเก็บข้อมูลเป็นจำนวนเต็มไปเลย ยกตัวอย่างเช่น
- 100.12345 จะทำการเก็บเป็น 10012345 ไปเลย
มี VDO อธิบายเรื่อง number ใน JavaScript ที่น่าสนใจ