PHP浮动比较

PHP float comparison

我有以下 PHP 代码,我想在其中比较两个十进制数。我在 PHP 文档中读到浮点数的精度有限。

$a = 0.0;

for ($i = 0; $i < 10; $i++) {
    $a += 0.1;
}

var_dump($a);
echo gettype($a);

if ($a === 1.0) {
    echo "IF";
} else {
    echo "ELSE";
}

当我将变量 $a 与 1.0 进行比较时,它总是 returns 错误,结果将是 'ELSE'。我的问题是如何让上面的代码正常工作。

这个问题之前有人问过,见Compare floats in PHP

基本上你需要计算差异,看看它是否小到可以接受 "equal"。

尝试这样的事情:

$a = 0.0;

for ($i = 0; $i < 10; $i++) {
    $a += 0.1;


$a=number_format($a,1);
//echo gettype($a);
//echo $a.'<br>';
if (floatval($a) === 1.0)
    echo "IF";
else
    echo "ELSE";
}

为了进行比较,我会将 $a 截断到一位小数并将 $a 格式化为具有所需精度的字符串并将其与“1.0”进行比较。

要截断 $a 我建议 reading this answer .

或者您可以使用 $a 作为整数。它们不是递增 0.1,而是使用 1。并在最终比较中使用 10。

你可以这样做:

//只是检查它是否是浮点数,然后将其四舍五入为 1 个十进制数并进行比较

if(is_float($a)){
    echo 'not a float';
    $a = round($a,1);
}

输出将是'IF'