Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

การเปรียบเทียบค่า Floating Point ใน PHP


ใน PHP การเทียบค่า floating point ด้วย == มักให้ผลผิด เพราะการเก็บค่าภายใน (internal representation) ไม่แม่นยำ ต้องใช้วิธีอื่น

ตัวอย่างปัญหา

<?php 
$a = 0.14; 
$b = 1 - 0.86; // 0.14 
if($a == $b) echo 'a and b are same'; 
else echo 'a and b are not same'; 
?>

ผลลัพธ์

a and b are not same.

วิธีแก้: ใช้ Epsilon (ค่าความคลาดเคลื่อนยอมรับได้)

<?php 
$val1 = 2.183459; 
$val2 = 2.183450; 
$epsilon = 0.00001; 
if(abs($val1 - $val2) < $epsilon) echo "True"; 
else echo "False"; 
?>

ผลลัพธ์

True

ใช้ abs() หาความต่างสัมบูรณ์ เปรียบเทียบกับ epsilon

วิธีแก้: ใช้ round()

<?php 
$val1 = 9 - 6.2; 
$val2 = 1.8; 
var_dump(round($val1, 2) == round($val2, 2)); 
?>

ผลลัพธ์

bool(true)

ปัดเศษทศนิยมก่อนเปรียบเทียบ