บทความนี้จะขอกล่าวถึงคำสั่ง number_format กับการป้องกันการคำนวณที่ผิดพลาด ซึ่งคำสั่ง number_format นั้นเป็นคำสั่งสำหรับการกำหนด Format ให้กับข้อมูลตัวเลขที่ต้องการ ซึ่งหลาย ๆ ครั้งอาจมีการเขียนโปรแกรมเพื่อปัดทศนิยมก่อนแล้วนำมาบวกกัน แต่เมื่อใช้คำสั่ง number_format แล้วนำมาบวกกันนั้นกลับไม่ได้ค่าตามที่เราต้องการ ซึ่งเกิดจากสาเหตุอะไรมาดูกันครับ
ตัวอย่างการเขียนโปรแกรมที่อาจทำให้เกิดการคำนวณที่ผิดพลาด
<?
$price = 56985.304546;
$discount = 5412.36;
echo "price = ".$price."<br/>";
echo "discount = ".$discount."<br/>";
$price = number_format( $price, 2 );
$discount = number_format( $discount, 2 );
$total = $price+$discount;
echo $price." + ".$discount." = ".$total;
?>
ผลลัพธ์
price = 56985.304546
discount = 5412.36
56,985.30 + 5,412.36 = 61
จากผลลัพธ์ที่ออกมานั้นจะเห็นว่าผิดพลาดซึ่งไม่เป็นไปตามที่เราคาดการเอาไว้ ซึ่งปัญหาเกิดจากตัวแปรที่ถูกใช้คำสั่ง number_format นั้นโดยปกติจะมีการติดเครื่องหมาย comma (เครื่องหมายลูกน้ำ) ระหว่างตัวเลขมาด้วย ซึ่งทำให้ไม่สามารถนำไปคำนวณได้นั้นเอง
วิธีการแก้ปัญหา
1. เปลี่ยนจากการใช้คำสั่ง number_format( value, 2 ) มาเป็น number_format( value, 2, '.', '' )
2. ใช้คำสั่ง str_replace แทน comma (เครื่องหมายลูกน้ำ) ให้เป็นอักษรว่าง เช่น str_replace( ',', '', value )