Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

So sánh số thực (Floating Point) trong PHP

So sánh == cho float thường sai do biểu diễn nhị phân không chính xác.

Ví dụ lỗi

<?php
$a = 0.14;
$b = 1 - 0.86; // 0.14
echo ($a == $b) ? "same" : "not same"; // not same!
?>

Giải pháp 1: So sánh với epsilon (sai số cho phép)

<?php
$v1 = 2.183459;
$v2 = 2.183450;
$eps = 0.00001;
echo (abs($v1 - $v2) < $eps) ? "True" : "False"; // True
?>

Giải pháp 2: Làm tròn với round()

<?php
$v1 = 9 - 6.2; // 2.799999...
$v2 = 2.8;
var_dump(round($v1, 2) == round($v2, 2)); // bool(true)
?>

Khuyên dùng

  • Tiền tệ: lưu dạng integer (cents) hoặc dùng thư viện brick/math.
  • So sánh gần đúng: abs($a-$b) < $epsilon.
  • Tránh so sánh == trực tiếp cho float.