Home > Backend Development > PHP Tutorial > Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

DDD
Release: 2024-12-23 16:56:11
Original
791 people have browsed it

Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?

Comparing Floating-Point Numbers in PHP

When comparing floating-point numbers in PHP, it's essential to handle subtle differences in their representation and precision. This can be challenging, as illustrated by the following code:

<?php
$a = 0.17;
$b = 1 - 0.83; // 0.17

if ($a == $b) {
    echo 'a and b are same';
} else {
    echo 'a and b are not same';
}
?>
Copy after login

In this code, you might expect the if condition to be true since $a and $b represent the same value. However, it unexpectedly evaluates to false, indicating that $a and $b are not equal.

Why the Comparison Fails

The reason for this discrepancy lies in the internal representation of floating-point numbers in computers. These numbers are approximations, and their precision is limited. When performing floating-point calculations, small rounding errors can accumulate, leading to unexpected results when comparing them for equality.

Handling Float Comparisons

To address this issue, you should avoid comparing floats using the strict equality operator (==) unless you're absolutely certain they represent the same value. Instead, use the abs() function and compare the absolute difference between the two values against a small acceptable tolerance.

For instance, you could use the following code to compare $a and $b with a tolerance of 0.00001:

if (abs(($a - $b) / $b) < 0.00001) {
    echo "a and b are same";
} else {
    echo "a and b are not same";
}
Copy after login

This method provides a more reliable way to compare floats for practical purposes.

The above is the detailed content of Why Do Floating-Point Comparisons in PHP Sometimes Fail, and How Can We Correctly Compare Them?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template